首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环,以标识缺少的变量并在Python中创建虚拟行。

循环,以标识缺少的变量并在Python中创建虚拟行。
EN

Stack Overflow用户
提问于 2020-08-09 06:44:13
回答 2查看 86关注 0票数 0

我有两列的数据帧

  1. 车辆登记号码
  2. 知识管理服务已完成

有不同登记号的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

输出将类似于这个输出

EN

回答 2

Stack Overflow用户

发布于 2020-08-09 06:55:36

您可以在系列文章中使用reindex

代码语言:javascript
复制
# 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
票数 0
EN

Stack Overflow用户

发布于 2020-08-11 05:58:13

使用reindex & np.arange

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63323278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档