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 循环分组的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:自定义 WMAPE 函数聚合函数到多列而没有 for 循环?
pandas 学习 第4篇:序列的处理(应用聚合转换映射分组滚动扩展指数加权移动平均)
快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]