Python Pandas-Groupby +单元格的条件计数值

问题描述

我有一个表,其中包含包裹ID,它们的出发时间,到达时间以及类型或包裹的列表。

下面给出了一个最小的工作示例来说明该表。

对于每条线,我正在尝试获取类似类型的包裹(即电视或PC)的包裹数,这些包裹的发车时间大于或等于[所考虑的行的发车时间],但严格低于[到达时间]的行数]

输入数据示例

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

所需输出数据的示例

Parcel_id,type,number_of_parcels
id_1,TV,4
id_2,PC,4
id_3,4
id_4,4
id_5,2
id_6,3
id_7,1
id_8,3
id_9,2
id_10,1

我正在尝试使用groupby函数,然后应用条件...。没有成功

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

有人知道如何破解吗?

非常感谢

解决方法

这有效

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