Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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_Python 3.x_Pandas_Dataframe - Fatal编程技术网

使用Python对数据帧进行分组

使用Python对数据帧进行分组,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我的数据帧: ordercode quantity PMC21-AA1U1FBWBJA 1 PMP23-GR1M1FB3CJ 1 PMC11-AA1U1FJWWJA 1 PMC11-AA1U1FBWWJA+I7 2 PMC11-AA1U1FJWWJA 3 PMC11-AA1L1FJWWJA 3 我的期望输出: Group ordercode

我的数据帧:

  ordercode             quantity
PMC21-AA1U1FBWBJA           1
PMP23-GR1M1FB3CJ            1
PMC11-AA1U1FJWWJA           1
PMC11-AA1U1FBWWJA+I7        2
PMC11-AA1U1FJWWJA           3
PMC11-AA1L1FJWWJA           3
我的期望输出:

  Group    ordercode                quantity
    0       PMC21-AA1U1FBWBJA           1
            PMP23-GR1M1FB3CJ            1
             PMC11-AA1U1FJWWJA          1
            PMC11-AA1U1FBWWJA+I7        1
    1      PMC11-AA1U1FBWWJA+I7         1
            PMC11-AA1U1FJWWJA           3
    2      PMC11-AA1L1FJWWJA            3
所以这里我想要的结果是基于
列['quantity']
。数量的最大值为
4

组0和组1中
总值(1+1+1+1=4)(1+3=4)(即将数量的最大值保持为4)。在
group2
中,我们可以看到没有要添加的值,因此该组由剩余值组成(这里是3)。在
group0和group1
中,我们可以看到
PMC11-AA1U1FBWWJA+I7
的值拆分

我从论坛上得到了一些帮助,并完成了以下编码:

df = pd.DataFrame(np.concatenate(df.apply(lambda x: [x[0]] * x[1], 1).as_matrix()), 
              columns=['ordercode'])
df['quantity'] = 1
df['group'] = sorted(range(0, len(df)/3, 1) * 4)[0:len(df)]
df.groupby(['group', 'ordercode']).sum()
但是我犯了一个错误

Type error: 'float' object cannot be interpreted as an integer
如果我在中使用
int

df['group'] = sorted(range(0, int(len(df)/3), 1) * 4)[0:len(df)]
我再次得到
typeerror
。谁能告诉我为什么

假设您使用Python3, 键入双斜杠
/
进行整数除法,并将范围转换为列表

df['group'] = sorted(list(range(0, len(df) // 3, 1)) * 4)[0:len(df)]
对于第二次尝试,它看起来是这样的

df['group'] = sorted(list(range(0, int(len(df) / 3), 1)) * 4)[0:len(df)]
所以完整的代码是这样运行的。 在运行之前,我将您的示例复制到剪贴板

import pandas as pd
import numpy as np
df = pd.read_clipboard()
df = pd.DataFrame(np.concatenate(df.apply(lambda x: [x[0]] * x[1], 1).as_matrix()), 
              columns=['ordercode'])
df['quantity'] = 1
df['group'] = sorted(list(range(0, len(df) // 3, 1)) * 4)[0:len(df)]
df = df.groupby(['group', 'ordercode']).sum()
print(df)

您使用的“.as_matrix()”命令生成警告,但有效。

是的,我使用的是Python 3。我得到了
Typeerror:不支持的操作数类型*:“range”和“int”
我更新了回复。第一行中有一个括号问题。当我使用列表函数时,它会给我一个警告<代码>未来警告:方法。as_矩阵将在未来版本中删除。改为使用.values.df=pd.DataFrame(np.concatenate(df.apply(lambda x:[x[0]]*x[1],1)。as_matrix()),columns=['ordercode'])我没有得到任何结果我在jupyter笔记本电脑中运行了您的示例并得到了请求的结果。我将更新答案以包括正在运行的示例。我得到的结果是
df['group']=sorted(list(range(0,len(df)//3,1))*4)[0:len(df)]
但它没有分组
df.groupby(['group',ordercode'])。sum()