我有一個由 float64 組成的資料框 (df),我想基本上“折疊自己”。它目前的索引為 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]
uj5u.com熱心網友回復:
編輯:同樣的技術可以應用于任何列,而不僅僅是索引。我最初將這個問題解釋為詢問對索引進行分組,但我想我可能誤解了這一點。OP,如果您想對 column 中的值執行此操作x,請執行df.groupby(df["x"] % 10).sum().
解決方案
您可以使用 groupby 和模塊化演算法:
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
現在而不是.apply(print)簡單.sum()地獲取每個組的總和:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/333438.html
上一篇:如何根據兩個條件熊貓選擇行
