我有以下数据框:
test1 = pd.DataFrame({'id_A' : [1,2,3,4,5,6],
'value_A' : 6*['dog']})
test2 = pd.DataFrame({'id_B' : [1,3,5],
'value_B' : 3*['cat']})
,我想获得一个数据帧,其中id_A
= id_B
,两个字符串串联在一起(id_B
变为0,其中它不对应于id_A
),
id_A | id_B | final_value
1 1 'dog, cat'
2 0 'dog'
3 1 'dog, cat'
4 0 'dog'
5 1 'dog, cat'
当然有很多这样的标签,而不仅仅是两个。
我现在正在尝试类似地图的操作,但是它似乎不起作用:
test1['value_A'] = test2['id_B'].map(df1.value_A + df2.set_index('id_B')['value_B'])
我需要以某种方式将两个字符串连接起来并将它们添加到新列中。
答案 0 :(得分:2)
使用Series.isin
作为支票会员,然后通过主要添加Series.fillna
来更改map
解决方案:
#if need indicator column
test1['id_B'] = test1['id_A'].isin(test2['id_B']).astype(int)
#if need id_B values
#test1['id_B'] = test1['id_A'].where(test1['id_A'].isin(test2['id_B']), 0)
s = test1.value_A + ', '+ test2.set_index('id_B')['value_B']
test1['final_value'] = test1['id_A'].map(s).fillna(test1.pop('value_A'))
print (test1)
id_A id_B final_value
0 1 1 dog, cat
1 2 0 dog
2 3 1 dog, cat
3 4 0 dog
4 5 1 dog, cat
5 6 0 dog