我有一个如下所示的df:
a date c
0 ABC 2020-06-01 0.1
1 ABC 2020-05-01 0.2
2 DEF 2020-07-01 0.3
3 DEF 2020-01-01 0.4
4 DEF 2020-02-01 0.5
5 DEF 2020-07-01 0.6
我想“拆开”列“ a”,以便我的新df像这样
a date1 c1 date2 c2 date3 c3 date4 c4
0 ABC 2020-06-01 0.1 2020-05-01 0.2 nan nan nan nan
1 DEF 2020-07-01 0.3 2020-01-01 0.4 2020-02-01 0.5 2020-07-01 0.6
我该怎么做?
答案 0 :(得分:1)
将GroupBy.cumcount
用于MultiIndex
的辅助计数器并通过DataFrame.unstack
进行整形,然后使用正确的顺序DataFrame.sort_index
和map
来使{{1} }:
MultiIndex
或者如果由于不同的列名称而无法进行排序,则一个想法是使用DataFrame.reindex
:
df = (df.set_index(['a',df.groupby('a').cumcount().add(1)])
.unstack()
.sort_index(axis=1, level=[1, 0], ascending=[True, False]))
df.columns = df.columns.map(lambda x: f'{x[0]}{x[1]}')
df = df.reset_index()
print (df)
a date1 c1 date2 c2 date3 c3 date4 c4
0 ABC 2020-06-01 0.1 2020-05-01 0.2 NaN NaN NaN NaN
1 DEF 2020-07-01 0.3 2020-01-01 0.4 2020-02-01 0.5 2020-07-01 0.6