大佬教程收集整理的这篇文章主要介绍了在 combine_first 和 merge 之间?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个主数据框 A
ID A B C
0 a b c
1 d e f
2 g h i
3 j k l
和更新的数据框 B
ID A B D
0 a2 b2 x
1 d2 e2 y
2 g2 h2 z
3 j2 k2 NaN
4 l2 m2 NaN
5 n2 o2 NaN
如果我 @H_250_5@merge 它们,我会得到重复的列,如 A
、A_x
、B
和 B_x
。如果我使用 combine_first
,我最终会得到我不感兴趣的行 4
、5
和列 D
。除了做类似
not_on_a = B["ID"].isin(A["ID"])
B = B.loc[not_on_a,[A,B]]
A = A.combine_first(B)
有没有办法覆盖 B
上的 A
而忽略不在 A
上的所有内容?所需的输出是
ID A B C
0 a2 b2 c
1 d2 e2 f
2 g2 h2 i
3 j2 k2 l
如果索引相同,这是一个简单的update
:
>>> import pandas as pd
>>> df1 = pd.DataFrame({"A": ["a","d","g","j"],"B": ["b","e","h","k"],"C": ["c","f","i","l"]})
>>> df1
A B C
0 a b c
1 d e f
2 g h i
3 j k l
>>> df2 = pd.DataFrame({"A": ["a2","d2","g2","j2","l2","n2"],"B": ["b2","e2","h2","k2","m2","o2"],"D": ["x","y","z",None,None]})
>>> df2
A B D
0 a2 b2 x
1 d2 e2 y
2 g2 h2 z
3 j2 k2 None
4 l2 m2 None
5 n2 o2 None
>>> df1.update(df2)
>>> df1
A B C
0 a2 b2 c
1 d2 e2 f
2 g2 h2 i
3 j2 k2 l
如果您不想改变第一个数据帧,您可以先创建一个 copy。
,您可以使用 join
然后根据需要清理数据框。我通过将 drop
放在您稍后使用的 dropna
值的列的后缀中来动态执行此操作,方法是将列的子集定义为其中包含“drop”的列。
df = B.join(A,lsuffix='',rsuffix='drop')
df = df.dropna(subset=[col for col in df.columns if 'drop' in col])
df = df[A.columns]
df
id A B C
0 a2 b2 c
1 d2 e2 f
2 g2 h2 i
3 j2 k2 l
以上是大佬教程为你收集整理的在 combine_first 和 merge 之间?全部内容,希望文章能够帮你解决在 combine_first 和 merge 之间?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。