让我们说,经过一些groupby操作后,我有一个像这样的数据框:
data = pd.DataFrame(columns=['Key', 'Subkey', 'Value'])
data.loc[0] = ['foo1', 'bar1', 20]
data.loc[1] = ['foo1', 'bar2', 10]
data.loc[2] = ['foo1', 'bar3', 5]
data.loc[3] = ['foo2', 'bar1', 50]
data.loc[4] = ['foo2', 'bar2', 100]
data.loc[5] = ['foo2', 'bar3', 50]
我接下来的是一个如下所示的数据框:
|Key |Subkey | Value |
+----+-------+-------+
|foo1|bar1 |20 |
|foo1|bar2 |10 |
|foo1|bar3 |5 |
|foo2|bar1 |50 |
|foo2|bar2 |100 |
|foo2|bar3 |50 |
我想要的是一个新的数据框,其中子项是一个新列,包含与上面分组框架中相同的值,如:
|Key |bar1 |bar2 |bar3 |
+----+-----+------+------+
|foo1| 20 | 10 | 5 |
|foo2| 50 | 100 | 50 |
是否有单行解决方案,还是需要以编程方式转换数据帧?
答案 0 :(得分:2)
您可以使用pivot
:
print (data.pivot(index='Key', columns='Subkey', values='Value'))
Subkey bar1 bar2 bar3
Key
foo1 20.0 10.0 5.0
foo2 50.0 100.0 50.0
然后,您可以将float
值转换为int
,reset_index
并删除列名称Subkey
:
print (data.pivot(index='Key', columns='Subkey', values='Value')
.astype(int)
.reset_index()
.rename_axis(None, axis=1))
Key bar1 bar2 bar3
0 foo1 20 10 5
1 foo2 50 100 50