Python pandas - 按组分组 + 有条件计数单元格值

3
我有一个包含包裹ID、出发时间、到达时间和包裹类型的表格。
下面是一个最小的工作示例,用于说明该表格。
对于每一行,我都试图获取相似类型(即电视或电脑)的包裹数量,其出发时间大于或等于[所考虑行的出发时间]且严格小于[所考虑行的到达时间]。
输入数据的示例:
Parcel_id, departure_time, arrival_time, type
id_1, 07:00, 07:30, TV
id_2, 07:00, 07:15, PC
id_3, 07:05, 07:22, PC
id_4, 07:10, 07:45, TV
id_5, 07:15, 07:50, TV
id_6, 07:10, 07:26, PC
id_7, 07:40, 08:10, TV
id_8, 07:14, 07:46, TV
id_9, 07:14, 07:32, PC
id_10, 07:15, 07:30, PC

期望输出数据示例

Parcel_id, departure_time, arrival_time, type, number_of_parcels
id_1, 07:00, 07:30, TV, 4
id_2, 07:00, 07:15, PC, 4
id_3, 07:05, 07:22, PC, 4
id_4, 07:10, 07:45, TV, 4
id_5, 07:15, 07:50, TV, 2
id_6, 07:10, 07:26, PC, 3
id_7, 07:40, 08:10, TV, 1
id_8, 07:14, 07:46, TV, 3
id_9, 07:14, 07:32, PC, 2
id_10, 07:15, 07:30, PC, 1

我尝试使用groupby函数,并应用条件...但一直没有成功。

table['number_of_parcels']= table.groupby(['type']).cond.apply(lambda g: (g>=table['departure`_time'] & g<table['arrival_time'])).count()

有人知道如何破解这个吗?

非常感谢。


你好Michael,对于id_1,我有4行数据符合条件:它们的出发时间分别为07:00、07:10、07:15、07:14,满足>= 07:00且<07:30的条件。 - CharlesAntoine
针对id_2,符合条件的行是id_2、id_3、id_6和id_9。我忘了提到我只希望考虑相似类型的包裹(我会在初始问题中更新)。我能够澄清我的请求吗? - CharlesAntoine
是的,你说得对,抱歉犯了错误。 - CharlesAntoine
1个回答

2

这个有效

df['number_of_parcels'] = df.groupby('type').apply(lambda x: x.apply(lambda y:(
    (x['departure_time'] >= y['departure_time']) & (x['departure_time'] < y['arrival_time'])
    ).sum(), axis=1)).droplevel(level=0)
df

输出:

  Parcel_id departure_time arrival_time type  number_of_parcels
0      id_1          07:00        07:30   TV                  4
1      id_2          07:00        07:15   PC                  4
2      id_3          07:05        07:22   PC                  4
3      id_4          07:10        07:45   TV                  4
4      id_5          07:15        07:50   TV                  2
5      id_6          07:10        07:26   PC                  3
6      id_7          07:40        08:10   TV                  1
7      id_8          07:14        07:46   TV                  3
8      id_9          07:14        07:32   PC                  2
9     id_10          07:15        07:30   PC                  1

非常感谢您的帮助和超快速的支持 :) 另外,我还发现了droplevel函数,我会阅读相关文档。 - CharlesAntoine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接