更新DataFrame以在内部求和它的元素



我有一个数据帧(df),由float64组成,我想把它自己"折叠"起来。它目前的索引是0-30,我需要它在0-9,组合以相同数字结尾的元素(0与10,20和30;1与11、21;例如:

for i in df:
for x in df[i]:
df[i][x] = df[i][x] + df[i][x + 10] + df[i][x + 20] + df[i][x + 30]

由于某种原因,我得到一个KeyError输出第一个[I][x]

EDIT:同样的技术可以应用于任何列,而不仅仅是索引。我最初把这个问题解释为关于指数分组的问题,但我想我可能误解了这一点。OP,如果您想对列x中的值执行此操作,则执行df.groupby(df["x"] % 10).sum()

解决方案可以使用群比和模运算:

df.groupby(df.index % 10).sum()

为了展示它是如何工作的,使用以下示例数据框架:

In [3]: df
Out[3]:
a     b
0   0.92  0.21
1   0.17  0.91
2   0.52  0.34
3   0.11  0.50
4   0.23  0.15
5   0.14  0.34
6   0.41  0.83
7   0.11  0.79
8   0.13  0.01
9   0.23  0.25
10  0.24  0.00
11  0.59  0.64
12  0.58  0.16
13  0.20  0.02
14  0.37  0.65
15  0.06  0.21
16  0.26  0.47
17  0.30  0.98
18  0.79  0.45
19  0.70  0.55

使用df.groupby(df.index % 10)对以相同数字结尾的索引进行分组并打印分组:

In [4]: df.groupby(df.index % 10).apply(print)
a     b
0   0.92  0.21
10  0.24  0.00
a     b
1   0.17  0.91
11  0.59  0.64
a     b
2   0.52  0.34
12  0.58  0.16
a     b
3   0.11  0.50
13  0.20  0.02
a     b
4   0.23  0.15
14  0.37  0.65
a     b
5   0.14  0.34
15  0.06  0.21
a     b
6   0.41  0.83
16  0.26  0.47
a     b
7   0.11  0.79
17  0.30  0.98
a     b
8   0.13  0.01
18  0.79  0.45
a     b
9   0.23  0.25
19  0.70  0.55

现在用.sum()代替.apply(print)来得到每组的和:

In [5]: df.groupby(df.index % 10).sum()
Out[5]:
a     b
0  1.16  0.21
1  0.76  1.55
2  1.10  0.50
3  0.31  0.52
4  0.60  0.80
5  0.20  0.55
6  0.67  1.30
7  0.41  1.77
8  0.92  0.46
9  0.93  0.80

相关内容

  • 没有找到相关文章

最新更新