输入匹配两个数据帧中两列的pandas数据帧

时间:2018-06-11 10:34:17

标签: python-2.7 pandas dataframe

我有一个数据框C和另一个数据框S。如果CC中的两列具有相同的值,我想更改S列中某个值的值。

请考虑下面给出的例子,

C.head(3)
   id1     id2  title   val
0   1      0     'abc'   0
1   2      0     'bcd'   0
2   3      0     'efg'   0

S.head(3)
   id1    id2
0   1      1
1   3      0

我想将值1分配给C中的列'val',仅对应于C.id1 = S.id1和C.id2 = S.id2

的行

(C.id1,C.id2)和(S.id1,S.id2)的组合在各自的表格中是唯一的

在上面的例子中,我希望结果为

C.head(3)
   id1     id2  title  val
0   1      0    'abc'   0
1   2      0    'bcd'   0
2   3      0    'efg'   1

仅在C的第三行中,与列Sid1的{​​{1}}行之一匹配。

1 个答案:

答案 0 :(得分:1)

我认为需要merge左连接和参数indicator,最后将boolen mask转换为01

#if same columns for join in both df parameter on is possible omit
df = C.merge(S, indicator=True, how='left')
#if multiple same columns in both df
#df = C.merge(S, indicator=True, how='left', on=['id1', 'id2'])
df['val'] = (df['_merge'] == 'both').astype(int)
df = df.drop('_merge', axis=1)
print (df)
   id1  id2  val
0    1    0    0
1    2    0    0
2    3    0    1

解决方案适用于新数据:

df = C.merge(S, indicator=True, how='left')
#if multiple same columns in both df
#df = C.merge(S, indicator=True, how='left', on=['id1', 'id2'])
df['val'] = (df['_merge'] == 'both').astype(int)
df = df.drop('_merge', axis=1)
print (df)
   id1  id2 title  val
0    1    0   abc    0
1    2    0   bcd    0
2    3    0   efg    1