如何在 pandas 中替换部分数据框 [英] How to replace part of dataframe in pandas

查看:93
本文介绍了如何在 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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆