熊猫:将行堆叠为新列

时间:2020-06-22 13:43:22

标签: python pandas pivot

我有一个如下所示的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

我该怎么做?

1 个答案:

答案 0 :(得分:1)

GroupBy.cumcount用于MultiIndex的辅助计数器并通过DataFrame.unstack进行整形,然后使用正确的顺序DataFrame.sort_indexmap来使{{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
相关问题