熊猫使用列分组按另一个数据框更新数据框

用户名

我有两个这样的数据框

df1 = pd.DataFrame({'A': ['1', '2', '3', '4','5'],
                  'B': ['1', '1', '1', '1','1'],
                  'C': ['A', 'A1', 'A2', 'A3','A4'],
                  'D': ['B0', 'B1', 'B2', 'B3','B4'],
                  'E': ['A', 'A', 'S', 'S','S']})
df2 = pd.DataFrame({'A': ['1', '6', '9', '4'],
                  'C': ['c', 'c1', 'c2', 'c3'],
                  'D': ['d1', 'd1', 'd2', 'd3']})

并且我想在df1 ['A'] == df2 ['A']中获得相同的列值时用df2更新df1的C,D列(如果df1 ['A'] == df2 ['A']然后df1 ['C'] = df2 ['C']和df1 ['D'] = df2 ['D'])

答案应该是这样的

      A  B   C   D  E
   0  1  1   c  d1  A
   1  2  1  A1  B1  A
   2  3  1  A2  B2  S
   3  4  1  c3  d3  S
   4  5  1  A4  B4  S

我试过了,df1.update(df2)但它只是被df2覆盖df1

>df1.update(df2)
>       A  B   C   D  E
     0  1  1   c  d1  A
     1  6  1  c1  d1  A
     2  9  1  c2  d2  S
     3  4  1  c3  d3  S
     4  5  1  A4  B4  S

pd.merge(df1, df2,how='inner' ,on=['A'])仍然没有想要我想要的

   A  B C_x D_x  E C_y D_y
0  1  1   A  B0  A   c  d1
1  4  1  A3  B3  S  c3  d3

谁能给我一些建议?谢谢

胡安帕·阿里维利亚加

我认为这将更加节省空间:

编辑添加

这可能更有效:

In [22]: df1,df2 = df1.align(df2,join='left',axis=0)

In [23]: df1
Out[23]: 
   A  B   C   D  E
0  1  1   A  B0  A
1  2  1  A1  B1  A
2  3  1  A2  B2  S
3  4  1  A3  B3  S
4  5  1  A4  B4  S

In [24]: df2
Out[24]: 
     A    C    D
0    1    c   d1
1    6   c1   d1
2    9   c2   d2
3    4   c3   d3
4  NaN  NaN  NaN

现在,您可以找到一个列相等的布尔数组,并使用loc基于分配的df1原位修改而无需额外的列:

In [26]: equal_rows = df1.A == df2.A

In [27]: df1.loc[equal_rows]
Out[27]: 
   A  B   C   D  E
0  1  1   A  B0  A
3  4  1  A3  B3  S

In [28]: df1.loc[equal_rows,['C','D']] = df2.loc[equal_rows,['C','D']]

In [29]: df1
Out[29]: 
   A  B   C   D  E
0  1  1   c  d1  A
1  2  1  A1  B1  A
2  3  1  A2  B2  S
3  4  1  c3  d3  S
4  5  1  A4  B4  S

而且,如果您真的需要df2,就像原来一样:

In [30]: df2.dropna(how='all',axis=0, inplace=True)

In [31]: df2
Out[31]: 
   A   C   D
0  1   c  d1
1  6  c1  d1
2  9  c2  d2
3  4  c3  d3

原始答案

这是一种笨拙的方法,空间利用率不高:

In [13]: merged = pd.merge(df1,df2,how='left', on=['A'])

In [14]: merged
Out[14]: 
   A  B C_x D_x  E  C_y  D_y
0  1  1   A  B0  A    c   d1
1  2  1  A1  B1  A  NaN  NaN
2  3  1  A2  B2  S  NaN  NaN
3  4  1  A3  B3  S   c3   d3
4  5  1  A4  B4  S  NaN  NaN

In [15]: merged.fillna({'C_y':df1.C,'D_y':df1.D},inplace=True)
Out[15]: 
   A  B C_x D_x  E C_y D_y
0  1  1   A  B0  A   c  d1
1  2  1  A1  B1  A  A1  B1
2  3  1  A2  B2  S  A2  B2
3  4  1  A3  B3  S  c3  d3
4  5  1  A4  B4  S  A4  B4

In [16]: merged.drop(['C_x','D_x'],axis=1,inplace=True)

In [17]: merged
Out[17]: 
   A  B  E C_y D_y
0  1  1  A   c  d1
1  2  1  A  A1  B1
2  3  1  S  A2  B2
3  4  1  S  c3  d3
4  5  1  S  A4  B4

如果您想要原始名称:

In [20]: merged.rename(columns={"C_y":'C','D_y':'D'},inplace=True)

In [21]: merged
Out[21]: 
   A  B  E   C   D
0  1  1  A   c  d1
1  2  1  A  A1  B1
2  3  1  S  A2  B2
3  4  1  S  c3  d3
4  5  1  S  A4  B4

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用熊猫基于另一个数据框向数据框添加列

来自分类Dev

如何使用熊猫中另一个数据框的值更新一个数据框

来自分类Dev

如何从另一个数据框更新带有集合的熊猫数据框

来自分类Dev

从另一个数据框中更新熊猫数据框中的特定值

来自分类Dev

根据另一个数据框的列填充熊猫数据框列

来自分类Dev

根据另一个数据框对数据框的列进行分组

来自分类Dev

根据另一个数据框向熊猫数据框列添加值

来自分类Dev

熊猫数据框-将列添加到另一个数据框

来自分类Dev

大熊猫使用另一个数据框列在数据框列中填充NaN

来自分类Dev

Pyspark过滤器数据框按另一个数据框的列

来自分类Dev

按来自另一个数据框的多列过滤数据框

来自分类Dev

使用来自另一个数据框的比率分解熊猫数据框

来自分类Dev

熊猫-使用另一个数据框过滤数据框

来自分类Dev

使用另一个数据框过滤熊猫数据框

来自分类Dev

根据另一个数据框列更新数据框列,无需 for 循环

来自分类Dev

使用条件从另一个数据框中更新值来更新pandas数据框列

来自分类Dev

在Dataframe中对列进行分组,并使用分组的数据创建另一个数据框

来自分类Dev

使用熊猫从另一个数据框中的信息中过滤一个数据框

来自分类Dev

Spark Scala:从另一个数据框更新数据框列的值

来自分类Dev

熊猫更新并在一个数据框中添加行,在另一个数据框中添加键列

来自分类Python

大熊猫-按行元素按另一个数据框过滤数据框

来自分类Dev

如何使用 Pandas 根据另一个数据框的结果更新数据框

来自分类Dev

按另一个数据框中的值分组

来自分类Dev

如何基于另一个数据框更新一个数据框中的列?

来自分类Dev

如何使用另一个数据框添加数据框并基于列更新公共值

来自分类Dev

从另一个数据框填充一个数据框的列

来自分类Dev

如何使用另一个数据框的子集填充数据框的列?

来自分类Dev

遍历一个数据框中的单个列与另一个数据框中的列进行比较使用熊猫在第一个数据框中创建新列

来自分类Dev

通过按列值分组从一个熊猫数据框创建多个数据框

Related 相关文章

  1. 1

    使用熊猫基于另一个数据框向数据框添加列

  2. 2

    如何使用熊猫中另一个数据框的值更新一个数据框

  3. 3

    如何从另一个数据框更新带有集合的熊猫数据框

  4. 4

    从另一个数据框中更新熊猫数据框中的特定值

  5. 5

    根据另一个数据框的列填充熊猫数据框列

  6. 6

    根据另一个数据框对数据框的列进行分组

  7. 7

    根据另一个数据框向熊猫数据框列添加值

  8. 8

    熊猫数据框-将列添加到另一个数据框

  9. 9

    大熊猫使用另一个数据框列在数据框列中填充NaN

  10. 10

    Pyspark过滤器数据框按另一个数据框的列

  11. 11

    按来自另一个数据框的多列过滤数据框

  12. 12

    使用来自另一个数据框的比率分解熊猫数据框

  13. 13

    熊猫-使用另一个数据框过滤数据框

  14. 14

    使用另一个数据框过滤熊猫数据框

  15. 15

    根据另一个数据框列更新数据框列,无需 for 循环

  16. 16

    使用条件从另一个数据框中更新值来更新pandas数据框列

  17. 17

    在Dataframe中对列进行分组,并使用分组的数据创建另一个数据框

  18. 18

    使用熊猫从另一个数据框中的信息中过滤一个数据框

  19. 19

    Spark Scala:从另一个数据框更新数据框列的值

  20. 20

    熊猫更新并在一个数据框中添加行,在另一个数据框中添加键列

  21. 21

    大熊猫-按行元素按另一个数据框过滤数据框

  22. 22

    如何使用 Pandas 根据另一个数据框的结果更新数据框

  23. 23

    按另一个数据框中的值分组

  24. 24

    如何基于另一个数据框更新一个数据框中的列?

  25. 25

    如何使用另一个数据框添加数据框并基于列更新公共值

  26. 26

    从另一个数据框填充一个数据框的列

  27. 27

    如何使用另一个数据框的子集填充数据框的列?

  28. 28

    遍历一个数据框中的单个列与另一个数据框中的列进行比较使用熊猫在第一个数据框中创建新列

  29. 29

    通过按列值分组从一个熊猫数据框创建多个数据框

热门标签

归档