Pandas 循环分组

Posted

技术标签:

【中文标题】Pandas 循环分组【英文标题】:Pandas grouping with loops 【发布时间】:2021-07-13 09:24:25 【问题描述】:

有没有办法以这些方式对数据框(*csv 文件)进行分组? 例如,我想为第一列选择十行的块来平均,然后我想对第二列做同样的事情,但不保留块,而是每隔 10 行分组一次。 例如。我想要以下的平均值:

1  1  3rd 4th
1  2  .. ..
1  3  .. ..
..
1  9  .. ..
1 10  .. ..
2  1  .. ..
2  2  .. ..
2  3  .. ..

因此选择第一列的第一个块来计算平均值,然后每 x 行计算第二列。

例如,来自像这样的 df...

241888  1   1 
241888  2   1 
241888  3   2 
241888  4   2
241888  5   3 
241888  6   3
241888  7   4
241888  8   4
241888  9   5
241888  10  5 
665309  1   3
665309  2   3
665309  3   4
665309  4   4 
665309  5   5 
665309  6   5
665309  7   6 
665309  8   6 
665309  9   7 
665309  10  7

然后

df.groupby('24188').mean()[3]
df.groupby('665309').mean()[3]
df.groupby('1' of the 2nd column).mean()[3]
df.groupby('10' of the 2nd column).mean()[3]

给出 3、5 2 和 6

【问题讨论】:

能否将示例数据框与示例输出共享? 我尝试添加一个示例。 【参考方案1】:

对不起,如果我没有正确理解你。你想要这个吗?

import pandas as pd
import numpy as np

df = pd.DataFrame('a' : [1, 2, 3 , 4, 5 ,6 , 7], 
'b': [11, 12, 13 , 14, 15 ,16 , 17], 
'c': [21, 22, 23 , 24, 25 ,26 , 27]  )
print(df)
print("sum of 1 st column with 2nd rows(i.e. 2,4,6):")
print(df.iloc[[x for x in df.index if (x+1) % 2 == 0],0].sum())

print("sum of 3rd column with 3rd rows(i.e. 22,36):")
print(df.iloc[[x for x in df.index if (x+1) % 3 == 0],2].sum())

输出:

a   b   c
0  1  11  21
1  2  12  22
2  3  13  23
3  4  14  24
4  5  15  25
5  6  16  26
6  7  17  27
sum of 1 st column with 2nd rows(i.e. 2,4,6):
12
sum of 3rd column with 3rd rows(i.e. 22,36):
49

【讨论】:

不,我想计算第 3 列的平均值,针对 10 行(第一列的相同值)和每 10 行(第二行的相同值)的块。但是 *csv 真的很长,所以我必须做一个循环,但我不知道如何用 pandas 来做。 如果您不是通过组合两列来进行分组,那么您可以简单地使用它吗? df.groupby('1st col').mean()['3rd column']--对于前两个结果 df.groupby['2nd column'].mean()['3rd column'] 然后过滤 1 和 10 - -> 最后两个答案 我不明白你怎么能唤起没有标题的列。你会写“col2”吗?

以上是关于Pandas 循环分组的主要内容,如果未能解决你的问题,请参考以下文章

python--pandas分组聚合

Pandas:自定义 WMAPE 函数聚合函数到多列而没有 for 循环?

pandas 学习 第4篇:序列的处理(应用聚合转换映射分组滚动扩展指数加权移动平均)

快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]

快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]

Pandas/Python 如何存储循环值