Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何利用熊猫的特定条件进行分组?_Python_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

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