【问题标题】:Pandas: Convert DataFrame Column Values Into New Dataframe Indices and ColumnsPandas:将 DataFrame 列值转换为新的 DataFrame 索引和列
【发布时间】:2013-07-17 19:57:26
【问题描述】:

我有一个如下所示的数据框:

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 填充缺失值。原始数据集很大,将导致第二个数据帧非常稀疏。然后我打算将此数据框添加到一个更大的数据框,这很简单。

谁能告诉我实现这一目标的最佳方法吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以为此使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 2021-03-01
      • 2021-11-22
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多