Pandas:将DataFrame列值转换为新的Dataframe索引和列

4

我有一个数据框,看起来像这样:

a  b  c
0  1  10
1  2  10
2  2  20
3  3  30
4  1  40
4  3  10

上面的数据框是默认索引(0,1,2,3,4…)。我希望将其转换为以下形式的数据框:

    1     2     3
0   10    0     0
1   0     10    0
2   0     20    0
3   0     0     30
4   40    0     10

当第一个数据集中的列'a'成为第二个数据集的索引时,'b'的值成为列名,c的值被复制过来,并用0或NaN填充缺失值。原始数据集很大,将导致第二个数据集非常稀疏。我打算将此数据集添加到一个更大的数据集中,这很简单。请问有什么最好的方法实现吗?
1个回答

12

你可以使用pivot方法来完成这个任务。

请参阅文档:http://pandas.pydata.org/pandas-docs/stable/reshaping.html#reshaping-by-pivoting-dataframe-objects

以下是一个示例:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'a':[0,1,2,3,4,4], 'b':[1,2,2,3,1,3], 'c':[10,10,20,3
0,40,10]})

In [3]: df
Out[3]:
   a  b   c
0  0  1  10
1  1  2  10
2  2  2  20
3  3  3  30
4  4  1  40
5  4  3  10

In [4]: df.pivot(index='a', columns='b', values='c')
Out[4]:
b   1   2   3
a
0  10 NaN NaN
1 NaN  10 NaN
2 NaN  20 NaN
3 NaN NaN  30
4  40 NaN  10

如果您想要在示例中使用零而不是 NaN,请使用 fillna

In [5]: df.pivot(index='a', columns='b', values='c').fillna(0)
Out[5]:
b   1   2   3
a
0  10   0   0
1   0  10   0
2   0  20   0
3   0   0  30
4  40   0  10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接