gpt4 book ai didi

python - LAMBDA 函数可以在进行聚合时从 python 中的另一列获取条件吗?

转载 作者:行者123 更新时间:2023-12-05 06:16:32 24 4
gpt4 key购买 nike

我正在寻找一种方法(如果存在)仅使用 lambda 方法对 df 执行聚合,但要符合另一列的条件。这是问题的一个小缩影。

df = pd.DataFrame({'ID':[1,1,1,1,2,2],
'revenue':[40,55,75,80,35,60],
'month':['2012-01-01','2012-02-01','2012-01-01','2012-03-01','2012-02-01','2012-03-01']})
print(df)
ID month revenue
0 1 2012-01-01 40
1 1 2012-02-01 55
2 1 2012-01-01 75
3 1 2012-03-01 80
4 2 2012-02-01 35
5 2 2012-03-01 60

如果您需要为每个 ID 设置唯一的月份,那么下面的代码很好(此代码仅用于演示 'month':'nunique' 在这里工作).

df = df.groupby(['ID']).agg({'month':lambda x:x.nunique()}).reset_index()
print(df)
ID month
0 1 3
1 2 2

但是,当收入大于 50 时,我需要通过在 lambda 中使用两个变量(收入和月份)来计算唯一的 months,例如 lambda x,是的:...

我可以像 df[df['revenue'] > 50].groupby.(....) 那样完成它,但是 agg( ) 不需要此条件的地方。那么,是否存在 lambda 可以同时采用 2 个变量的方法?

预期输出:

   ID  month
0 1 3
1 2 1

最佳答案

不幸的是,这可能不是简单/性能的方式,因为 GroupBy.agg 分别处理每一列:

不要使用它,因为如果 df 很大或有很多组,速度会非常慢。

def f(x):
a = df.loc[x.index]
return a.loc[a['revenue'] > 50, 'month'].nunique()


df1 = df.groupby(['ID']).agg({'month':f}).reset_index()
print(df1)
ID month
0 1 3
1 2 1

因此,一种可能的解决方案是在 GroupBy.apply 之前或使用 ojit_a 进行过滤。

关于python - LAMBDA 函数可以在进行聚合时从 python 中的另一列获取条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62065553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com