将数据帧列表合并为一个大数据帧,避免列和索引重复

问题描述 投票:0回答:1

列表中包含多个数据点。我想将它们组合成一个 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

这里我们有单独的列名称。我觉得我错过了一些明显的东西。感谢您的帮助!

python-3.x pandas dataframe
1个回答
0
投票

如果始终使用单行 DataFrame 作为输入,“名称”充当唯一键,请使用

groupby.first
:

pd.concat(list_of_frames).groupby('name', as_index=False).first()
© www.soinside.com 2019 - 2024. All rights reserved.