通过删除一些标头并重命名一些索引来旋转 pandas

Ama*_*ngh 4 python pivot pandas

我有以下熊猫数据框:

    count  event      date
0    1544  'strike'   2016-11-01
1     226  'defense'  2016-11-01
2    1524  'strike'   2016-12-01
3     246  'defense'  2016-12-01
4    1592  'strike'   2017-01-01
5     245  'defense'  2017-01-01
Run Code Online (Sandbox Code Playgroud)

我想以这样的方式旋转/转换它,最终输出如下所示:

event     2016-11-01 2016-12-01 2017-01-01 2017-02-01 2017-03-01                                                                     
'strike'        1544       1524       1592       1608       1654   
'defense'        226        246        245        210        254
Run Code Online (Sandbox Code Playgroud)

但我现在在旋转时得到的是这样的:

                        count          count            count           count             count\
date          2016-11-01 2016-12-01 2017-01-01 2017-02-01 2017-03-01   
event                                                                  
'strike'            1544       1524       1592       1608       1654   
'defense'            226        246        245        210        254   
Run Code Online (Sandbox Code Playgroud)

有什么方法可以删除event索引名称前面的整个空行并将date索引名称重命名为其event索引名称,并删除count数据框第一行中出现的不需要的内容?数据似乎正在正确转换,我只想摆脱这些标头和索引,并正确重命名和删除。我也不希望在所需的输出中出现行标签。

这就是我到目前为止一直在尝试的:

output = df.pivot(index='event', columns='date')
print(output)
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

解决方案是将参数添加valuespivot,然后添加reset_indexfor 列indexrename_axis从删除列名称中删除:

output=df.pivot(index='event',columns='date',values='count').reset_index().rename_axis(None,1)
print(output)
       event  2016-11-01  2016-12-01  2017-01-01
0  'defense'         226         246         245
1   'strike'        1544        1524        1592
Run Code Online (Sandbox Code Playgroud)

如果省略它会发生什么?

print (df)
   count      event        date  count1
0   1544   'strike'  2016-11-01       1
1    226  'defense'  2016-11-01       7
2   1524   'strike'  2016-12-01       8
3    246  'defense'  2016-12-01       3
4   1592   'strike'  2017-01-01       0
5    245  'defense'  2017-01-01       1
Run Code Online (Sandbox Code Playgroud)

pivot使用每个未使用的列并创建MultiIndex以区分原始列:

output = df.pivot(index='event', columns='date')
print(output)
               count                           count1                      
date      2016-11-01 2016-12-01 2017-01-01 2016-11-01 2016-12-01 2017-01-01
event                                                                      
'defense'        226        246        245          7          3          1
'strike'        1544       1524       1592          1          8          0
Run Code Online (Sandbox Code Playgroud)