Python numpy dataframe 跨两个数据帧的条件运算(例如求和)

Seb*_*ian 2 python dataframe pandas

我正在尝试计算涉及另一个数据帧中查找的条件总和。

import pandas as pd
first = pd.DataFrame([{"a": "aaa", "b": 2, "c": "bla", "d": 1}, {"a": "bbb", "b": 3, "c": "bla", "d": 1}, {"a": "aaa", "b": 4, "c": "bla", "d": 1}, {"a": "ccc", "b": 11, "c": "bla", "d": 1}, {"a": "bbb", "b": 23, "c": "bla", "d": 1}])
second = pd.DataFrame([{"a": "aaa", "val": 111}, {"a": "bbb", "val": 222}, {"a": "ccc", "val": 333}, {"a": "ddd", "val": 444}])

print(first)
print(second)
Run Code Online (Sandbox Code Playgroud)

这两个数据框是

     a   b    c  d
0  aaa   2  bla  1
1  bbb   3  bla  1
2  aaa   4  bla  1
3  ccc  11  bla  1
4  bbb  23  bla  1
Run Code Online (Sandbox Code Playgroud)

     a  val
0  aaa  111
1  bbb  222
2  ccc  333
3  ddd  444
Run Code Online (Sandbox Code Playgroud)

我想在second其中附加一列,其中b包含与相应的. 预期结果是:firstfirst.asecond.a

     a  val result
0  aaa  111      6
1  bbb  222     26
2  ccc  333     11
3  ddd  444      0
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个最小的示例,我希望看到一个使用 lambda 或其他函数的通用解决方案,而不是适用于此特定示例的特定 hack。

I'm*_*hdi 5

您可以对 groupby 的结果使用pandas.DataFrame.groupbythen use 。pandas.DataFrame.merge

g = first.groupby('a')['b'].sum().rename('result')
result = second.merge(g, on='a', how='left').fillna(0)
print(result)
Run Code Online (Sandbox Code Playgroud)

输出:

     a  val  result
0  aaa  111     6.0
1  bbb  222    26.0
2  ccc  333    11.0
3  ddd  444     0.0
Run Code Online (Sandbox Code Playgroud)