【发布时间】:2021-05-28 09:28:39
【问题描述】:
我有两个共享两个公共列“a”和“b”的数据框。我想创建一个函数,在 df1 中按类汇总“amount”的值,并将其添加到 df2 作为“sum”列。
这里是 df1 和 df2。
df1
a b class amount
0 orange ichi 1 10
1 apple ni 2 20
2 peach san 3 40
3 banana shi 2 15
4 lemon go 1 30
df2
a b
0 apple ni
1 orange ichi
2 lemon go
3 peach san
4 banana shi
5 apple ni
6 lemon go
我想像这样在 df2 中添加“sum”列。
df2
a b sum
0 apple ni 35
1 orange ichi 40
2 lemon go 40
3 peach san 30
4 banana shi 35
5 apple ni 35
6 lemon go 40
我创建了这个函数,它按组返回“金额”的总数。
#function
def num_count(a,b):
df1["sum"] = df1.groupby(['class'])['amount'].transform('sum')
amount_total = df1["sum"][(df1["a"] == str(a)) & (df1["b"] == str(b))]
return amount_total.item()
我正在尝试将此函数应用于 df2,但出现如下错误。 有谁知道如何解决这个错误?
df2['sum'] = df2.apply(lambda x: num_count(x['a'], x['b']), axis=1)
>>> ValueError: can only convert an array of size 1 to a Python scalar
【问题讨论】:
标签: python pandas function lambda