列表中包含多个数据点。我想将它们组合成一个 pandas DataFrame。最小的例子:
list_of_frames = [pd.DataFrame({'name':'adam', 'height':'180'}, index=[0]), pd.DataFrame({'name':'adam', 'weight':'80'}, index=[1]), pd.DataFrame({'name':'eve', 'height':'190'}, index=[2])]
如何获取以下DataFrame?
name height weight
0 adam 180 80
1 eve 190 NaN
如果我打电话
pd.concat(list_of_frames)
我会获得一份条目列表
name height weight
0 adam 180 NaN
1 adam NaN 80
2 eve 190 NaN
显然
height
变量已被“合并”。我可以折叠这个 DataFrame 吗?
或者我尝试了
reduce(lambda l, r: pd.merge(l, r, on='name', how='outer'), list_of_frames)
,这导致了
name height_x weight height_y
0 adam 180 80 NaN
1 eve NaN NaN 190
这里我们有单独的列名称。我觉得我错过了一些明显的东西。感谢您的帮助!
如果始终使用单行 DataFrame 作为输入,“名称”充当唯一键,请使用
groupby.first
:
pd.concat(list_of_frames).groupby('name', as_index=False).first()