使用.pivot时索引超出范围

时间:2019-01-03 10:17:57

标签: python python-3.x pandas indexoutofboundsexception

我有一个大小为(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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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