Python 将数据透视到数据帧中
我正在尝试使用数据帧的pivot_table函数透视数据 我的原始数据帧df具有形状(630352,5),生成的数据透视数据集应为(395194196784),但我收到的错误消息如下:Python 将数据透视到数据帧中,python,pandas,memory,pivot,pivot-table,Python,Pandas,Memory,Pivot,Pivot Table,我正在尝试使用数据帧的pivot_table函数透视数据 我的原始数据帧df具有形状(630352,5),生成的数据透视数据集应为(395194196784),但我收到的错误消息如下: File "D:\Anaconda\lib\site-packages\pandas\core\reshape\reshape.py", line 177, in _make_selectors mask.put(selector, True) IndexError: index 458495173
File "D:\Anaconda\lib\site-packages\pandas\core\reshape\reshape.py", line 177, in _make_selectors
mask.put(selector, True)
IndexError: index 458495173 is out of bounds for axis 0 with size 458444768
这是我用来透视数据的代码
df_pivot= df.pivot_table(index=['saleorder'],columns='product', values='quantity',aggfunc=sum)
原始df采用这种格式
saleorder | product | desc | id | quantity
12345 | bs1234 | abc | 2 | 1
12345 | bs12214 | abc | 2 | 1
12312 | bs12214 | abc | 2 | 1
我在评论中写道:
# Test data:
text="""saleorder | product | desc | id | quantity
10001 | prod01 | abc | 2 | 1
12345 | prod02 | abc | 2 | 2
12345 | prod03 | abc | 2 | 3
12312 | prod04 | abc | 2 | 4
12345 | prod03 | abc | 2 | 3
88888 | prod05 | abc | 2 | 5
99999 | prod03 | abc | 2 | 3
99999 | prod05 | abc | 2 | 5
12345 | prod03 | abc | 2 | 3
"""
df=pd.read_csv(io.StringIO(text),sep=r"[\s\|]+",engine="python").sort_values("saleorder")
saleorder product desc id quantity
0 10001 prod01 abc 2 1
3 12312 prod04 abc 2 4
1 12345 prod02 abc 2 2
2 12345 prod03 abc 2 3
4 12345 prod03 abc 2 3
8 12345 prod03 abc 2 3
5 88888 prod05 abc 2 5
6 99999 prod03 abc 2 3
7 99999 prod05 abc 2 5
在第6位(不是索引!)开始新的“销售订单”:
df1p= df.iloc[:6].pivot_table(index=['saleorder'],columns='product', values='quantity',aggfunc=sum)
df2p= df.iloc[6:].pivot_table(index=['saleorder'],columns='product', values='quantity',aggfunc=sum)
dfrslt= pd.concat([df1p,df2p],sort=False)
prod01 prod02 prod03 prod04 prod05
saleorder
10001 1.0 NaN NaN NaN NaN
12312 NaN NaN NaN 4.0 NaN
12345 NaN 2.0 9.0 NaN NaN
88888 NaN NaN NaN NaN 5.0
99999 NaN NaN 3.0 NaN 5.0
你能分享你的数据框样本吗?@GrzegorzSkibinski请看原始帖子,添加了样本格式不知道。也许您应该将df分成两部分,并使用“pivot_table”分别测试它们。df=df.sort_值('saleorder'),查找作为新“saleorder”开始的索引,例如:300000。df1=df.iloc[:300000],df2=df.iloc[300000:]@kantal这就是我目前所做的,但一旦我旋转了每个块,我将如何将它们合并到一起。我不能只使用外部合并,因为它可能的产品ID将被重复,在这种情况下,我希望它们作为合并数据框中的新行,而不是重复的列。@Isra连接它们!如果数据透视帧是df1p和df2p:dfrslt=pd.concat([df1p,df2p],sort=False)