我有两个数据框。
df1:
key column_a
AA AAB
AA AAC
AB ABA
AB ABK
df2:
key column_b
AA AAA
AB ABA
AB ABK
AC ACC
我想将它们合并,但是column_a和column_b将成为列表。
key column_a column_b
AA ['AAB','AAC'] ['AAA']
AB ['ABA','ABK'] ['ABA','ABK']
AC NaN ['ACC']
答案 0 :(得分:1)
如果转换为列表,您将失去使用连续内存块中保存的NumPy数组所具有的矢量化功能。
使用concat
,groupby
和聚合lambda函数的解决方案-删除NaN
并创建list
s:
df = pd.concat([df1, df2]).groupby('key').agg(lambda x: x.dropna().tolist())
print (df)
column_a column_b
key
AA [AAB, AAC] [AAA]
AB [ABA, ABK] [ABA, ABK]
AC [] [ACC]
最后一次需要将NaN
的空白列表替换为DataFrame.where
:
df = df.where(df.astype(bool))
print (df)
column_a column_b
key
AA [AAB, AAC] [AAA]
AB [ABA, ABK] [ABA, ABK]
AC NaN [ACC]