【问题标题】:Index is out of bounds when using .pivot使用 .pivot 时索引超出范围
【发布时间】:2019-05-29 22:09:45
【问题描述】:

我有一个大小为 (2481430, 2) 的数据框,我想按列 B 分组,而没有列 codex 的摘要。

我使用了 .pivot,它返回“索引 2025068794 超出轴 0 的范围,大小为 2024681638”

   codex    B
0  D0003    20
1  D0004    21
2  D0003    21
3  D0001    20
4  D0002    20
5  D0005    20


df.pivot(columns = 'B', values = 'codex')

这是预期的结果

   20       21
0  D0003    D0004
1  D0001    D0003
2  D0002    NaN
3  D0005    NaN

【问题讨论】:

  • 您的代码在给定数据下工作正常
  • @VivekKalyanarangan,实际上,这行不通,因为索引没有标准化。
  • 性能重要吗?
  • 是的,我的数据框只是一个示例
  • @DiogoPedroso - 所以这取决于数据,所以最好在下面测试这两种解决方案。

标签: python python-3.x pandas indexoutofboundsexception


【解决方案1】:

groupby + pd.concat

您可以使用groupby,然后将pd.Series 对象与标准化索引连接起来:

grouper = df.groupby('B')['codex']
res = pd.concat((pd.Series(vals.values, name=b) for b, vals in grouper), axis=1)

print(res)

      20     21
0  D0003  D0004
1  D0001  D0003
2  D0002    NaN
3  D0005    NaN

【讨论】:

    【解决方案2】:

    pandas.pivotcumcount 一起用于新索引:

    df = pd.pivot(columns = df['B'], values = df['codex'], index= df.groupby('B').cumcount())
    print (df)
    B     20     21
    0  D0003  D0004
    1  D0001  D0003
    2  D0002    NaN
    3  D0005    NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2014-03-10
      • 2021-06-21
      • 1970-01-01
      • 2018-12-10
      • 2018-03-01
      • 1970-01-01
      相关资源
      最近更新 更多