程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 combine_first 和 merge 之间?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 combine_first 和 merge 之间??

开发过程中遇到在 combine_first 和 merge 之间?的问题如何解决?下面主要结合日常开发的经验,给出你关于在 combine_first 和 merge 之间?的解决方法建议,希望对你解决在 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 它们,我会得到重复的列,如 AA_xBB_x。如果我使用 combine_first,我最终会得到我不感兴趣的行 45 和列 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,请注明来意。