gpt4 book ai didi

pandas - 合并 Pandas 数据框 : how to add columns and replace values

转载 作者:行者123 更新时间:2023-12-05 00:45:57 26 4
gpt4 key购买 nike

我有一个数据框 df1 并想合并其他(许多)数据框 df2 以便:

  • 合并发生在匹配的(多)索引上
  • 如果缺少则创建新列
  • 如果列已存在,则替换值

enter image description here

什么是正确的 pandas 操作以及使用什么参数?我查看了 concat/join/merge/assign/append 但还没有找到。

数据框代码:

df1 = pd.DataFrame({'A':['A1', 'A2', 'A3', 'A4'],
'B':['B1', 'B2' ,'B3', 'B4'],
'C':['C1' ,'C2', 'C3', 'C4']},
index = [1,2,3,4])

df2 = pd.DataFrame({'C':['NewC'], 'D':['NewD']},
index=[3])

最佳答案

一种方法是使用 combine_first :

df2.combine_first(df1)

输出:

    A   B     C     D
1 A1 B1 C1 NaN
2 A2 B2 C2 NaN
3 A3 B3 NewC NewD
4 A4 B4 C4 NaN

另一种方法是使用 joinfillna:

df1[['A','B']].join(df2).fillna(df1)

输出:

    A   B     C     D
1 A1 B1 C1 NaN
2 A2 B2 C2 NaN
3 A3 B3 NewC NewD
4 A4 B4 C4 NaN

第三种方式,

df1a = df1.reindex(df1.columns.union(df2.columns), axis=1)
df1a.update(df2)
df1a

时间:

%%timeit pd.concat((df1,df2),sort=False).groupby(level=0).last()  

4.56 ms ± 947 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit 
df1a = df1.reindex(df1.columns.union(df2.columns), axis=1)
df1a.update(df2)
df1a

2.93 ms ± 133 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit df1[['A','B']].join(df2).fillna(df1)

5.2 ms ± 89.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit df2.combine_first(df1)

5.37 ms ± 127 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于pandas - 合并 Pandas 数据框 : how to add columns and replace values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62355898/

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