gpt4 book ai didi

python - 将多个数据帧与互补缺失值组合起来的最有效方法

转载 作者:行者123 更新时间:2023-12-04 01:27:32 27 4
gpt4 key购买 nike

这可能是一个非常基本的问题。假设我有两个数据框:

>>> df1
id a
0 0 5.0
1 1 10.0
2 2 15.0
3 3 NaN
4 4 NaN
5 5 NaN

>>> df2
id a
0 0 NaN
1 1 NaN
2 2 NaN
3 3 20.0
4 4 25.0
5 5 30.0


我想加入 id 上的数据框,看起来像:

>>> df_joined
id a
0 0 5.0
1 1 10.0
2 2 15.0
3 3 20.0
4 4 25.0
5 5 30.0

到目前为止,我一直在进行左合并,例如df1.merge(df2, how = 'left', on = 'id) 但这会导致重复的列(见下文),我必须通过填充 nans、重命名列,然后删除重复项。如果我要合并 2 个以上的数据框,这将变得特别乏味。

# How do I better merge this so I don't have fill nans, rename, and drop the columns?
id a_x a_y
0 0 5.0 NaN
1 1 10.0 NaN
2 2 15.0 NaN
3 3 NaN 20.0
4 4 NaN 25.0
5 5 NaN 30.0

执行此操作的更好方法是什么?

最佳答案

IIUC,DataFrame.combine_first

df1.combine_first(df2)

id a
0 0 5.0
1 1 10.0
2 2 15.0
3 3 20.0
4 4 25.0
5 5 30.0

编辑

我们可以使用DataFrame.set_index + DataFrame.combine_first mapreduce 用于 n DataFrames。

my_list_df = [df1, df2]

from functools import reduce
reduce(lambda new_df, df_to_combine: new_df.combine_first(df_to_combine),
map(lambda df: df.set_index('id'), my_list_df)).reset_index()

输出

   id     a
0 0 5.0
1 1 10.0
2 2 15.0
3 3 20.0
4 4 25.0
5 5 30.0

在这种情况下我们只需要reduce:

reduce(lambda new_df, df_to_combine: new_df.combine_first(df_to_combine.set_index('id')),
my_list_df[1:], my_list_df[0].set_index('id')).reset_index()

关于python - 将多个数据帧与互补缺失值组合起来的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61621816/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com