如何解决识别缺失的变量并创建虚拟行-基于范围
输入数据框
input_df = pd.DataFrame({'RegistrationNumber':['HY12TN2345','HY12TN2345','JO78UI4675','JO78UI4675'],'KMServiceDone' : [10000,20000,50000,210000,230000,250000]})
print(input)
需要输出-最后一列,即状态可用
output = pd.DataFrame({'RegistrationNumber':['HY12TN2345','HY12TN2345'],30000,40000,220000,240000,250000],'StatusAvailed':['Availed','Availed','Missed','Availed']})
print(output)
我尝试过的
# 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['StatusAvailed'] = np.where(dfx['RegistrationNumber'].isna(),'Availed')
但未获得所需的输出。请输入任何内容。
解决方法
您需要生成一系列缺失的数字:
delta = 10000
df = (df.assign(Status="Availed")
.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)
RegistrationNumber KMServiceDone Status
0 HY12TN2345 10000 Availed
1 HY12TN2345 20000 Availed
2 HY12TN2345 30000 Missed
3 HY12TN2345 40000 Missed
4 HY12TN2345 50000 Availed
5 JO78UI4675 210000 Availed
6 JO78UI4675 220000 Missed
7 JO78UI4675 230000 Availed
8 JO78UI4675 240000 Missed
9 JO78UI4675 250000 Availed
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。