想象一下我有这样的数据框
key A
0 K0 A0
1 K1 A1
2 K2 A2
3 K3 A3
4 K4 A4
5 K5 A5
另一个
key B
0 K0 B0
1 K1 B1
2 K2 B2
df.set_index('key').join(other.set_index('key'))
的结果将是
A B
key
K0 A0 B0
K1 A1 B1
K2 A2 B2
K3 A3 NaN
K4 A4 NaN
K5 A5 NaN
我想将加入的结果合并到一个包含相应值列表的列中。 所以我想实现以下目标:
AB
key
K0 A0,B0
K1 A1,B1
K2 A2,B2
K3 A3
K4 A4
K5 A5
我该怎么做?
答案 0 :(得分:2)
您可以在 df
上 concat
数据框 other
和 axis=0
,然后通过 group
和聚合列 key
A
结果数据框1}} 使用 ','.join
:
c = pd.concat([df, other.rename(columns={'B': 'A'})])
df_out = c.groupby('key').agg(AB=('A', ','.join))
或者,您可以使用 Series.map
将 key
中 df
列中的值与 B
中 other
列中的值进行映射,然后在分隔符 A
周围添加带有映射列 B
的列 ,
:
B = df['key'].map(other.set_index('key')['B']).fillna('')
df_out = (df['A'] + ',' + B).str.rstrip(',').to_frame('AB')
>>> df_out
AB
key
K0 A0,B0
K1 A1,B1
K2 A2,B2
K3 A3
K4 A4
K5 A5