我有两列的数据帧
有不同登记号的25,000+车辆。这些车辆提供的服务范围从10 000公里到800 000公里不等。
1车已提供10 000公里、20 000公里、70 000公里的服务。
错过服务:3万公里、40000公里、5万公里、60000公里
2车已提供服务210 000公里,220 000公里230 000公里,250 000公里
错过的服务:24万公里等等.
要求
For循环,以确定特定车辆错过了哪些服务,并创建具有注册号、km服务和指定服务可用或错过服务的第三列的虚拟行。
这是一个样本数据
登记号码KM服务已完成
HY12TN2345 10000
HY12TN2345 20000
HY12TN2345 70000
JO78UI4675 210000
JO78UI4675 220000
JO78UI4675 230000
JO78UI4675 250000
RT09EW0764 80000
RT09EW0764 90000
RT09EW0764 100000
RT09EW0764 110000
RT09EW0764 150000
RT09EW0764 160000
RT09EW0764 170000
RT09EW0764 180000
EQ21IT3040 410000
EQ21IT3040 510000
输出将类似于这个输出
发布于 2020-08-09 06:55:36
您可以在系列文章中使用reindex:
# get all possible values
all_services = df['KMServiceDone'].unique()
def reindex_grp(grp):
s = grp.set_index('KMServiceDone')
# add dummy rows for missing KMServiceDone
s = s.reindex(all_services)
return s.reset_index()
# apply function on each group
dfx = (df
.groupby('RegistrationNumber', as_index=False)
.apply(reindex_grp)
.reset_index(drop=True))
# create status column
dfx['service_status'] = np.where(dfx['RegistrationNumber'].isna(),
'Missed',
'Availed')
print(dfx.head(20))
KMServiceDone RegistrationNumber service_status
0 10000 NaN Missed
1 20000 NaN Missed
2 70000 NaN Missed
3 210000 NaN Missed
4 220000 NaN Missed
5 230000 NaN Missed
6 250000 NaN Missed
7 80000 NaN Missed
8 90000 NaN Missed
9 100000 NaN Missed
10 110000 NaN Missed
11 150000 NaN Missed
12 160000 NaN Missed
13 170000 NaN Missed
14 180000 NaN Missed
15 410000 EQ21IT3040 Availed
16 510000 EQ21IT3040 Availed
17 10000 HY12TN2345 Availed
18 20000 HY12TN2345 Availed
19 70000 HY12TN2345 Availed发布于 2020-08-11 05:58:13
使用reindex & np.arange
df = (df.assign(Status="service_status")
.set_index("KMServiceDone")
.groupby("RegistrationNumber")["Status"]
.apply(lambda d: d.reindex(np.arange(min(d.index), max(d.index)+delta, delta)))
.reset_index()
.fillna("Missed"))
print (df)https://stackoverflow.com/questions/63323278
复制相似问题