Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据透视到数据帧中_Python_Pandas_Memory_Pivot_Pivot Table - Fatal编程技术网

Python 将数据透视到数据帧中

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

我正在尝试使用数据帧的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 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)