在熊猫中基于两组索引将来自两个数据框的值连接起来

时间:2019-11-13 12:01:26

标签: pandas dataframe pandas-groupby

我有以下数据框:

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'])

我需要以某种方式将两个字符串连接起来并将它们添加到新列中。

1 个答案:

答案 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