Python 在df.groupby中使用列表进行分组似乎不起作用
我正在尝试使用列表对行进行分组,这是熊猫分组的一种方式 目标是: 我想对数据框中的N行数进行分组,所以我采用了groupby将list作为输入并按顺序分组行的方法。在讨论这个问题之前,让我向您展示我用来分组行的代码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.
导入数学
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
下签出