如何在 pandas 中替换部分数据框 [英] How to replace part of dataframe in pandas
本文介绍了如何在 pandas 中替换部分数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这样的示例数据框
df1=
A B C
a 1 2
b 3 4
b 5 6
c 7 8
d 9 10
我想用此数据框替换此数据框的一部分(col A = a和b)
I would like to replace a part of this dataframe (col A=a and b) with this dataframe
df2=
A B C
b 9 10
b 11 12
c 13 14
我想在下面得到结果
df3=
A B C
a 1 2
b 9 10
b 11 12
c 13 14
d 9 10
我尝试过
df1[df1.A.isin("bc")]...
但是我不知道该如何替换. 有人告诉如何替换数据框.
But I couldnt figure out how to replace. someone tell how to replace dataframe.
推荐答案
您需要 combine_first
或 cumcount
:
You need combine_first
or update
by column A
, but because duplicates need cumcount
:
df1['g'] = df1.groupby('A').cumcount()
df2['g'] = df2.groupby('A').cumcount()
df1 = df1.set_index(['A','g'])
df2 = df2.set_index(['A','g'])
df3 = df2.combine_first(df1).reset_index(level=1, drop=True).astype(int).reset_index()
print (df3)
A B C
0 a 1 2
1 b 9 10
2 b 11 12
3 c 13 14
4 d 9 10
另一种解决方案:
df1['g'] = df1.groupby('A').cumcount()
df2['g'] = df2.groupby('A').cumcount()
df1 = df1.set_index(['A','g'])
df2 = df2.set_index(['A','g'])
df1.update(df2)
df1 = df1.reset_index(level=1, drop=True).astype(int).reset_index()
print (df1)
A B C
0 a 1 2
1 b 9 10
2 b 11 12
3 c 13 14
4 d 9 10
如果df1
中的列A
的重复项在df2
中相同且长度相同:
If duplicatesof column A
in df1
are same in df2
and have same length:
df2.index = df1.index[df1.A.isin(df2.A)]
df3 = df2.combine_first(df1)
print (df3)
A B C
0 a 1.0 2.0
1 b 9.0 10.0
2 b 11.0 12.0
3 c 13.0 14.0
4 d 9.0 10.0
这篇关于如何在 pandas 中替换部分数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文