我正在尝试使用lambda函数计算聚合…别的。
我的数据框架看起来像这样
States Sales
0 Delhi 0.0
1 Kerala 2.5
2 Punjab 5.0
3 Haryana 7.5
4 Delhi 10.0
5 Kerala 12.5
6 Punjab 15.0
7 Haryana 17.5
期望汇总表应该像这样
States Sales
Delhi 10.0
Haryana 25.0
Kerala 15.0
Punjab 20.0
我尝试使用以下代码
df.groupby('States').agg({
'Sales':lambda x: np.sum(x) if (x>7) else 0
})
我得到ValueError:一个Series的真值是模糊的。使用a.empty a.bool (), a.item (), a.any()或所有()。
我做错了什么?
如果(x>7)
输出为Series
与True
和False
s比较,则使用any
来测试是否匹配最小值:
df1 = df.groupby('States').agg({'Sales':lambda x: np.sum(x) if (x>7).any() else 0})
print (df1)
Sales
States
Delhi 10.0
Haryana 25.0
Kerala 15.0
Punjab 20.0
如果需要将所有低于或等于7
的值替换为0
,然后聚合sum
,使用:
df2 = df['Sales'].where(df['Sales'].gt(7), 0).to_frame().groupby(df['States']).sum()
print (df2)
Sales
States
Delhi 10.0
Haryana 25.0
Kerala 12.5
Punjab 15.0
df.groupby('States')['Sales'].agg(lambda x: sum(x) if x.ge(7).any() else 0).to_frame('Sales')
Sales
States
Delhi 10.0
Haryana 25.0
Kerala 15.0
Punjab 20.0