Python熊猫-如何将具有两个不同列的两个数据帧合并到两个列表列中

Python熊猫-如何将具有两个不同列的两个数据帧合并到两个列表列中,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,我有两个数据帧 df1: df2: 我想合并它们,但列a和列b将成为一个列表 key column_a column_b AA ['AAB','AAC'] ['AAA'] AB ['ABA','ABK'] ['ABA','ABK'] AC NaN ['ACC'] 如果转换为列表,则会丢失使用连续内存块中的NumPy数组时附带的矢量化功能 使用和聚合lambda函数的解决方案-删除NaNs并创建lists: df = pd.concat([df

我有两个数据帧

df1:

df2:

我想合并它们,但列a和列b将成为一个列表

key  column_a       column_b
AA   ['AAB','AAC']  ['AAA']
AB   ['ABA','ABK']  ['ABA','ABK']
AC   NaN            ['ACC']

如果转换为列表,则会丢失使用连续内存块中的NumPy数组时附带的矢量化功能

使用和聚合lambda函数的解决方案-删除
NaN
s并创建
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
s,请使用:


很好!我想知道是否最好将列a和列b存储为单个列,并在另一列中指示该列来自哪个数据帧。我去问另一个问题。@MasakiAndou-你认为类似于
df=pd.concat([df1,df2],keys=('a','b'))的东西吗?然后获取
NaN
s值。
key  column_a       column_b
AA   ['AAB','AAC']  ['AAA']
AB   ['ABA','ABK']  ['ABA','ABK']
AC   NaN            ['ACC']
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]
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]