Python 如何利用熊猫的特定条件进行分组?
我有这个数据框:Python 如何利用熊猫的特定条件进行分组?,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有这个数据框: pickup_to_drop_location_km food_item_quantity 23 4.067 2 24 4.067 1 25 4.067 1 26 7.081 1 27 7.081 1 ... ... ... 595613 7.834 1 595675 6.199 1 595699 6.324 1 595700 6.324 1 595705 7.500 1 如果我做简单的分组求和(作
pickup_to_drop_location_km food_item_quantity
23 4.067 2
24 4.067 1
25 4.067 1
26 7.081 1
27 7.081 1
... ... ...
595613 7.834 1
595675 6.199 1
595699 6.324 1
595700 6.324 1
595705 7.500 1
如果我做简单的分组求和(作为标准方式)
df.groupby('picking\u to\u drop\u location\u km').sum()
我会得到:
pickup_to_drop_location_km food_item_quantity
0.058 1
0.123 3
0.126 2
0.177 1
0.180 1
..
17.046 2
20.561 1
20.915 1
23.201 2
25.244 1
但是我想提供一个条件,比如结果是食物项目数量应该是max 2。例如:如果数据帧为:
pickup_to_drop_location_km food_item_quantity
23 12.067 2
24 12.067 1
25 12.067 1
26 12.067 1
26 9.381 1
27 9.381 1
结果应该是这样的:
pickup_to_drop_location_km food_item_quantity
23 12.067 2
24 12.067 2
25 12.067 1
26 9.381 2
我希望,我已经说清楚了。食品项目数量列不能超过2。
对不起,我只是个初学者。!
有人帮忙吗 如果我正确理解了问题,这应该行得通
import numpy as np
df2 = df.groupby('pickup_to_drop_location_km').sum()
df2['food_item_quantity'] = np.minimum(df2['food_item_quantity'],2)
或者没有努比,或者更像熊猫
df2 = df.groupby('pickup_to_drop_location_km').sum()
df2[df2['food_item_quantity']>2] = 2
这是一个有点笨重,但工作。首先,我们定义一个函数,该函数将一个数字(比如5)“分块”到一个允许的最大数字列表中,然后剩下(5->[2,2,1]) 打印
[2,2,1]
现在,我们将此函数应用于汇总食品项目数量和爆炸
df2 = df.groupby('pickup_to_drop_location_km').sum()
df2['food_item_quantity'] = df2['food_item_quantity'].apply(lambda q: chunk_up(q,2))
df3 = df2.explode('food_item_quantity')
df3
印刷品
food_item_quantity pickup_to_drop_location_km
9.381 2
12.067 2
12.067 2
12.067 1
嗨,我试过这个。此解决方案仅适用于将大于2的值转换为2的情况。我在寻找更像groupby的方法,将“食物项目数量”相加为2,如果有任何大于2的值,则为额外的行创建单独的行。我在问题描述中提到过!谢谢
food_item_quantity pickup_to_drop_location_km
9.381 2
12.067 2
12.067 2
12.067 1