Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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 在df.groupby中使用列表进行分组似乎不起作用_Python_Pandas_Group By_Pandas Groupby - Fatal编程技术网

Python 在df.groupby中使用列表进行分组似乎不起作用

Python 在df.groupby中使用列表进行分组似乎不起作用,python,pandas,group-by,pandas-groupby,Python,Pandas,Group By,Pandas Groupby,我正在尝试使用列表对行进行分组,这是熊猫分组的一种方式 目标是: 我想对数据框中的N行数进行分组,所以我采用了groupby将list作为输入并按顺序分组行的方法。在讨论这个问题之前,让我向您展示我用来分组行的代码 导入数学 df=pd.DataFrame(np.random.randint(01100,(100,5))) #组中的行数或行数 n_elems=20 #数据集中的行总数 n_rows=df.shape[0] #要创建的组(使用ceil处理偶数/奇数行) n_groups=math.

我正在尝试使用列表对行进行分组,这是熊猫分组的一种方式

目标是: 我想对数据框中的N行数进行分组,所以我采用了groupby将list作为输入并按顺序分组行的方法。在讨论这个问题之前,让我向您展示我用来分组行的代码

导入数学
df=pd.DataFrame(np.random.randint(01100,(100,5)))
#组中的行数或行数
n_elems=20
#数据集中的行总数
n_rows=df.shape[0]
#要创建的组(使用ceil处理偶数/奇数行)
n_groups=math.ceil(n_行/n_元素)
组=[]
对于范围内的idx(n_组):
grp=[idx]*n_元素
扩展组(grp)
#按照groupby的要求制作相同的长度
组=组[:n_行]
#使用列表↓ 分组
df.groupby(groups.agg(['mean','count']))
问题是: 现在,在本例中,当我将每个组的行数从1取到19时,算法运行良好。 如果n_行为1,则分为100组;如果n_行为2,则分为50组;如果n_行为5,则分为20组;同样,直到19

但问题出现在第20位。我不知道为什么是20,它可以是基于行的其他长度的其他数字,但是这里给出n_行为20,它应该返回5个组,每个组包含20行。但它返回的数据帧看起来很奇怪,有100行,但有0列


我试图查找,但没有发现任何有用的东西。任何帮助都会让我更好地理解groupby


提前感谢。

尝试通过划分
索引来创建组,而不是:

n_elems = 2
new_df = df.groupby(df.index // n_elems).agg(['mean', 'sum'])
0112
平均和平均和
0  57.5  115  75.5  151  34.5   69
1  71.0  142  17.0   34  53.0  106
2  21.0   42  48.5   97  78.5  157

使用的示例DF:

import numpy as np
import pandas as pd

np.random.seed(5)
df = pd.DataFrame(np.random.randint(0, 100, (6, 3)))
df

    0   1   2
0  99  78  61
1  16  73   8
2  62  27  30
3  80   7  76
4  15  53  80
5  27  44  77

这是一个很大的输出。你想用这段代码做什么。你能在小于100行的范围内演示你想要的行为吗?我有10行,我想按行分组,而不是像往常一样按类别分组。所以我想把2-2-2-2-2行分成几组,10行中总共有5组。好的,现在从这些我可以做任何像均值,中位数,总和和其他的事情,但事情是关于合并行。谢谢!这成功了!但我想知道为什么?比如,如果我将我的列表转换为pd.Index的索引,那么它就可以工作了。请您告诉我,为组提供列表和索引有什么区别?因此您也可以使用
df.groupby(pd.Series([0,0,1,1,2,2]).agg(['mean',sum'])
df.groupby(np.array([0,0,1,1,2,2]).agg(['mean',sum'])
但它必须是能够对齐数据帧的东西。在文档中的
by
下签出