假设我有一个数据框,其中有两列,分别是“ column”和“ value”,如下所示:
数据框1:
column value
0 column1 1
1 column2 1
2 column3 1
3 column4 1
4 column5 2
5 column6 1
6 column7 1
7 column8 1
8 column9 8
9 column10 2
10 column1 1
11 column2 1
12 column3 1
13 column4 3
14 column5 2
15 column6 1
16 column7 1
17 column8 1
18 column9 1
19 column10 2
20 column1 5
.. ... ...
我要转换此数据框,使其看起来像这样:
数据框2:
column1 column2 column3 column4 column5 column6 column7 column8 column9 column10
0 1 1 1 1 2 1 1 1 8 2
1 1 1 1 3 2 1 1 1 1 2
2 5 .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. ..
现在我知道如何反过来了。如果您有一个名为df
的数据框,它看起来像数据框2 ,则可以将其与以下代码堆叠在一起:
df = (df.stack().reset_index(level=0, drop=True).rename_axis(['column']).reset_index(name='value'))
不幸的是,我不知道该怎么回去!
问题:如何操作数据框1 (如果是一个单词,将其拆开),使其看起来像数据框2 ?< / p>
答案 0 :(得分:2)
由set_index
创建$NewEventDate = $createDate->format('Y-m-d H:i:s');
,并由cumcount
创建计数器MultiIndex
,并由unstack
重塑形状:
Series
最后一次(如果需要按列名的数值排序)对整数使用extract
进行转换,并按argsort
获取列的位置-最后按iloc
进行重新排序:
g = df.groupby('column').cumcount()
df1 = df.set_index([g, 'column'])['value'].unstack(fill_value=0)
print (df1)
column column1 column10 column2 column3 column4 column5 column6 \
0 1 2 1 1 1 2 1
1 1 2 1 1 3 2 1
2 5 0 0 0 0 0 0
column column7 column8 column9
0 1 1 8
1 1 1 1
2 0 0 0