让我们假设我在python
和pandas
中具有以下内容:
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
基本上我想做的是将原始的成对列拆分为数据块,这些数据块以Names
为D
的行开始,并在下一个{{1 }}是Names
的开始。
最有效的方法是什么?
答案 0 :(得分:5)
想法是由Series.cumsum
创建的onPageFinished
,并将Series与GroupBy.cumcount
进行比较,然后通过DataFrame.unstack
进行重塑:
MultiIndex
答案 1 :(得分:3)
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