在熊猫中旋转一个系列



我有一个看起来像这样的系列:

Area        Classification         Samples
88          500m-1bi               34
94          500m-1bi               112
09          500m-1bi               912
            >1bi                   31
81          <1m                    6574
87          100-500m               12
...

我希望"分类"标签成为列,而"样本"成为值,因此看起来像这样:

Area       <1m    100-500m     500-1bi      >1bi  
88                             34
94                             112
09                             912          31
81         6574
87                12
...

我尝试过:

df.pivot(columns='Classification', values='Samples')

但是当我这样做时,我会得到AttributeError: 'Series' object has no attribute 'pivot'

所以我尝试将其转换为数据框:

df.to_frame().pivot(columns='Classification', values='Samples')

在这种情况下,我得到:

KeyError: 'Classification'

关于如何解决的想法?

**编辑**

该系列是从组函数中获得的:

df=df.groupby(['Area','Classification']).agg('count').sort_values('Samples')['Samples']

在此示例中略微修改了DF。添加了10个区域以填补空白:

Area        Classification         Samples
88          500m-1bi               34
94          500m-1bi               112
09          500m-1bi               912
10          >1bi                   31
81          <1m                    6574
87          100-500m               12

您需要设置索引,然后解开:

df.set_index(['Area', 'Classification']).unstack()

输出:

                Samples                       
Classification 100-500m 500m-1bi     <1m  >1bi
Area                                          
9                   NaN    912.0     NaN   NaN
10                  NaN      NaN     NaN  31.0
81                  NaN      NaN  6574.0   NaN
87                 12.0      NaN     NaN   NaN
88                  NaN     34.0     NaN   NaN
94                  NaN    112.0     NaN   NaN

以防您的数据框中有更多列,而只是想对'same'的功能解开stack:

copy = df.set_index(['Area', 'Classification']) # Multi-Index
result = copy['Samples'].unstack() # unstack separately

然后,您可以使用Concat将所有内容放在一起(添加未触及的列((由于您使用DF的副本,因此您现在没有麻烦(。

df = pd.concat([df, result], axis=1)

'imgnore_index'是错误的,所以你完成了。

最新更新