Python pandas - Groupby + 单元格值的条件计数
Python pandas - Groupby + Conditional count of cells values
我有一个 table,其中包含包裹 ID 列表、出发时间、到达时间和类型或包裹。
下面给出了一个最小的工作示例来说明 table。
对于每条线路,我试图获得发车时间优于或等于[所考虑线路的发车时间]且严格低于[所考虑线路的到达时间]
输入数据示例
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()
有没有人知道如何破解这个?
非常感谢
这个有效
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
我有一个 table,其中包含包裹 ID 列表、出发时间、到达时间和类型或包裹。
下面给出了一个最小的工作示例来说明 table。
对于每条线路,我试图获得发车时间优于或等于[所考虑线路的发车时间]且严格低于[所考虑线路的到达时间]
输入数据示例
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()
有没有人知道如何破解这个?
非常感谢
这个有效
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