将数据从列对拆分为多对列

时间:2019-06-11 13:27:17

标签: python pandas

让我们假设我在pythonpandas中具有以下内容:

    Names   Values
0   A   6
1   B   8
2   C   3
3   D   5
4   E   1
5   F   3
6   D   9
7   E   6
8   F   4
9   G   3
10  D   1
11  E   5
12  F   6

,我想将其转换为以下内容:

    Name_1  Values_1    Name_2  Values_2    Name_3  Values_3
0   D   5   D   9   D   1
1   E   1   E   6   E   5
2   F   3   F   4   F   6
3   NA  NA  G   3   NA  NA

基本上我想做的是将原始的成对列拆分为数据块,这些数据块以NamesD的行开始,并在下一个{{1 }}是Names的开始。

最有效的方法是什么?

2 个答案:

答案 0 :(得分:5)

想法是由Series.cumsum创建的onPageFinished,并将Series与GroupBy.cumcount进行比较,然后通过DataFrame.unstack进行重塑:

MultiIndex

答案 1 :(得分:3)

您还可以在axis=1中使用groupbyconcat

grps = df.Names.eq('D').cumsum()

df_new = pd.concat([df.reset_index(drop=True).rename(columns=lambda x: f'{x}_{i}')
                    for i, df in df[grps.gt(0)].groupby(grps)], axis=1)

[出]

  Names_1  Values_1 Names_2  Values_2 Names_3  Values_3
0       D       5.0       D         9       D       1.0
1       E       1.0       E         6       E       5.0
2       F       3.0       F         4       F       6.0
3     NaN       NaN       G         3     NaN       NaN