【发布时间】:2019-05-30 09:59:04
【问题描述】:
我有一个名为 df 的数据框,看起来与此类似(除了与每个 Client ID 关联的 Visit Date 列中的条目数上升到 74,并且有数百个独特的 Client IDs - 我在这里简化了)。
Visit Date Client ID
2016-05-25 C1009404
2016-06-30 C1009404
2016-07-14 C1009404
2016-07-20 C1009405
2016-08-03 C1009405
2016-08-08 C1009405
2016-08-10 C1009405
2016-08-15 C1009406
2016-08-17 C1009406
2016-08-24 C1009406
我想把它从长转宽,这样它看起来像这样:
Client ID Visit_1 Visit_2 Visit_3 Visit_4
C1009404 2016-05-25 2016-06-30 2016-07-14
C1009405 2016-07-20 2016-08-03 2016-08-08 2016-08-10
C1009406 2016-08-15 2016-08-17 2016-08-24
我已经尝试了以下代码:
df_wide = df.groupby(['Client ID'], as_index=False).agg(lambda x: ', '.join(set(x.astype(str))))
df_wide = pd.concat([df_wide[['Client ID','ENROLLED_DT']], df_wide['VISIT_DT'].str.split(',', expand=True)], axis=1)
df_wide = df_wide.rename(columns={0: 'Visit_1', 1: 'Visit_2', 2: 'Visit_3', 3: 'Visit_4'})
它产生了预期的结果,但日期不再按顺序排列。我该如何做到这一点,但要保持日期从左到右升序排列?
【问题讨论】:
-
也许根据客户 ID 对值进行排名,然后使用数据透视就可以了。试一试
标签: python pandas datetime python-datetime