lambda函数与if…else在agg上的数据帧



我正在尝试使用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)输出为SeriesTrueFalses比较,则使用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

最新更新