【问题标题】:Pandas PivotTable熊猫数据透视表
【发布时间】:2021-02-28 02:16:36
【问题描述】:

我有一个包含以下列的 Pandas 数据框:

SecId   Date           Sector     Country
184149  2019-12-31     Utility    USA
184150  2019-12-31     Banking    USA
187194  2019-12-31     Aerospace  FRA
...............
128502  2020-02-12     CommSvcs   UK
...............

SecId & Date 列是索引。我想要的是以下..

SecId   Date          Aerospace Banking CommSvcs ........  Utility AFG CAN .. FRA .... UK   USA ...
184149  2019-12-31        0        0       0                  1     0   0      0        0    1
184150  2019-12-31        0        1       0                  0     0   0      0        0    1
187194  2019-12-31        1        0       0                  0     0   0      1        0    0
................
128502  2020-02-12        0        0       1                  0     0   0      0        1    0
................

解决这个问题的有效方法是什么?每天对原始数据进行非规范化处理,可以有数百万行。

【问题讨论】:

  • 检查 pandas.get_dummies
  • 如果您需要能够使用不同的数据集重复这些步骤以获得相同的列布局,我不会使用pandas.get_dummies。在这种情况下,您可以使用 scikit-learn 中的 one-hot-encoder 类。但如果你真的必须做一次,get_dummies 是最简单、最快的方法。

标签: python pandas pivot-table multi-index


【解决方案1】:

您可以使用get_dummies。您可以预先转换为分类 dtype 来定义将创建哪些列。

代码:

SECTORS = df.Sector.unique()
df["Sector"] = df.Sector.astype(pd.Categorical(SECTORS))
COUNTRIES = df.Country.unique()
df["Country"] = df.Country.astype(pd.Categorical(COUNTRIES))

df2 = pd.get_dummies(data=df, columns=["Sector", "Country"], prefix="", pefix_sep="")

输出:

    SecId        Date  Aerospace  Banking  Utility  FRA  USA
0  184149  2019-12-31          0        0        1    0    1
1  184150  2019-12-31          0        1        0    0    1
2  187194  2019-12-31          1        0        0    1    0

【讨论】:

    【解决方案2】:

    按照@BEN_YO 的建议尝试:

    pd.get_dummies(df,columns=['Sector', 'Country'], prefix='', prefix_sep='')
    

    输出:

        SecId        Date  Aerospace  Banking  Utility  FRA  USA
    0  184149  2019-12-31          0        0        1    0    1
    1  184150  2019-12-31          0        1        0    0    1
    2  187194  2019-12-31          1        0        0    1    0
    

    【讨论】:

      猜你喜欢
      • 2023-01-11
      • 2017-01-14
      • 2019-04-28
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多