我有一个数据表,看起来像这样(注意这是浓缩的,有一些ID与2+ TIMEs):
ID TIME
1 10:12
1 4:43
2 9:12
3 1:43
3 16:47
4 2:55
我想让它变平,看起来像这样:
ID Time_1 Time_2
1 10:12 4:43
2 4:43
3 1:43 16:47
4 2:55
我正在查看"扁平化"选项,但还没有找到正确的答案。
https://pandas.pydata.org/pandas-docs/version/0.14.1/generated/pandas.Index.flatten.html
尝试分组并连接您的字符串
new = df.groupby('ID')['TIME'].agg(' '.join).str.split(expand=True)
new.columns = [f'Time_{col+1}' for col in new.columns] # rename columns
Time_1 Time_2
ID
1 10:12 4:43
2 9:12 None
3 1:43 16:47
4 2:55 None
要格式化为所需的布局,您可以使用.pivot()
如下:
(df.assign(serial='Time_'+df.groupby('ID').cumcount().add(1).astype(str))
.pivot(index='ID', columns='serial', values='TIME')
.rename_axis(columns=None)
.reset_index()
)
结果:
ID Time_1 Time_2
0 1 10:12 4:43
1 2 9:12 NaN
2 3 1:43 16:47
3 4 2:55 NaN
如果您希望缺失的值显示为空白,您可以使用:
(df.assign(serial='Time_'+df.groupby('ID').cumcount().add(1).astype(str))
.pivot(index='ID', columns='serial', values='TIME').fillna('')
.rename_axis(columns=None)
.reset_index()
)
结果:
ID Time_1 Time_2
0 1 10:12 4:43
1 2 9:12
2 3 1:43 16:47
3 4 2:55