我有一个看起来像这样的系列:
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'是错误的,所以你完成了。