我有一个表,其中有同一实例的多个条目和对该实例的多次调用。我试图为每个调用创建一列,其中最后一个调用为从第一个调用开始的每一行创建一列。下面是一个示例表:
姓名 | 出院日期 | 记录时间 | |
---|---|---|---|
A | 2021年7月1日 | 202113:20||
A | 2021年7月1日 | 2022年3月7日8:45 | |
A | 2021年7月15日 | 2022年7日9时 | |
2021年7月15日 | |||
A | 2021年7月15日 | 2022年7日14时14分 | |
A | 2021年7月20日 | 202110:02||
B | 2021年7月3日 | 2021年7月4日11:46 | |
B | 2021年7月6日 | 20217月7日9:34[/tr>||
B | 2021年7月6日 | 2021年7月7日12:23 | |
B | 2021年7月6日 | 2021年7月8日8:58 | |
B | 2021年7月6日 | 2021年7月8日15:51 | |
B | 2021年7月29日 | 20221年7月30日11:12 | |
B | 2021年7月29日 | 20221年7月30日16:41 |
这是有效的:
gb = df.groupby(["Name", "Discharge Date"])["Recorded Time"]
result = pd.concat([gb.last(),
pd.DataFrame(gb.apply(lambda x: pd.Series(x.values)).unstack()).add_prefix("Call ")],
axis=1)
试试这个:
gc = ['Name','Discharge Date']
rc = df.groupby(gc)['Recorded Time'].last()
(df.assign(cc = lambda x: x.groupby(gc).cumcount())
.set_index(gc + ['cc'])['Recorded Time'].unstack()
.rename(lambda x: 'Call {}'.format(x+1),axis=1).join(rc))