【问题标题】:Merge dataframes on keys, change value specific column合并键上的数据框,更改特定列的值
【发布时间】:2021-08-08 19:09:35
【问题描述】:

对不起,如果这个问题已经被问过了,但我在任何地方都找不到。

我有一个大型 DataFrame,其中包含 ['A', 'B', 'C'] 列,我想根据键 AB 用另一个较小的 DataFrame 的另一个值填充 C

我不想做一次,而是递归地做。我不想要额外的列 C,我想更改 df1 C 中的值。

DF1如下

A B C
0 monkey zoo 0
1 donkey farm 0
2 dog house 0
... 0
10000 monkey house 0
10001 donkey zoo 0

DF2如下

A B C
1 monkey zoo 1
2 dog house 2
3 donkey zoo 3

希望的结果

A B C
0 monkey zoo 1
1 donkey farm 0
2 dog house 2
... 0
10000 monkey house 0
10001 donkey zoo 3

【问题讨论】:

  • 查看pandas的合并功能

标签: python pandas dataframe recursion merge


【解决方案1】:

您可以将 numpy.where 与 pandas 结合使用。您可以链接 numpy.where 函数来添加多个条件。它没有使用循环,因此对于大量记录来说性能应该很好。例如:

import pandas as pd
import numpy as np

data = [[1, 'monkey', 'zoo'], [2, 'donkey', 'house'], [3, 'dog', 'house']]
df = pd.DataFrame(data, columns=['index','A','B'])
df['C'] = np.where((df['A']=='monkey') & (df['B'] == 'zoo'), 1, np.where((df['A'] == 'dog') & (df['B'] == 'house'), 2, 0))

print (df)

【讨论】:

  • 对不起,也许猴子和动物园是我的一个坏例子。但它们都是数据框中的唯一值,因此 ((df['A']=='monkey') & (df['B'] == 'zoo'), 2,0) 只发生一次。跨度>
  • 你可以添加更多的条件,在这个例子中我只考虑了一个条件
  • 非常感谢。我了解它的作用,但这并不是我真正想要的。我已经添加了一些代码,也许这解释了我想做的事情!
  • 我调整了答案以显示如何链接 np.where() 并添加多个条件。我不确定您添加的代码是什么意思。
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多