1
在通過一個pandas groupby對象正確迭代時存在一個特定的問題,我還不瞭解底層動態性能夠解決我的問題。通過groupby對象正確地迭代
下面,有一個簡短的示例代碼來模擬我的問題:
import pandas as pd
from pandas import *
import random
rand = np.random.RandomState(1)
df = pd.DataFrame({'A':['foo','bar','baz']*3,
'B': [400,800,800,1200,400,1200,800,400,1200],
'C': rand.randn(9),
'D': rand.randint(0, 20, 9)})
df.head(9)
現在我需要通過數據幀由兩列「A」和「B」分組,組迭代首先由「酒吧」,‘巴茲’和‘富C‘和‘爲曲線d’’,之後通過400,800和1200,並選擇然後從列中的值’ - 低於我嘗試用於選擇:
for k1, gp in df.groupby(['A']):
print '1st key =' + str(k1)
for k2, gp in df.groupby(['B']):
print '2nd key =' + str(k2)
print gp[['C','D']]
產生輸出
1st key =bar
2nd key =400
C D
0 1.624345 14
4 0.865408 17
7 -0.761207 9
2nd key =800
C D
1 -0.611756 18
2 -0.528172 4
6 1.744812 13
2nd key =1200
C D
3 -1.072969 9
5 -2.301539 0
8 0.319039 9
1st key =baz
2nd key =400
C D
0 1.624345 14
4 0.865408 17
7 -0.761207 9
2nd key =800
C D
1 -0.611756 18
2 -0.528172 4
6 1.744812 13
什麼是真正接近我需要的,但C和D的值從整個數據中列出。他並沒有舉例說明'A'='bar'和'B'= 800的值,但'B'= 800的所有值無論列'A'中的名稱如何。
我想創建反而是一樣的東西:
1st key =bar
2nd key =400
C D
4 0.865408 17
7 -0.761207 9
2nd key =800
C D
1 -0.611756 18
1st key =baz
2nd key =800
C D
2 -0.528172 4
2nd key =1200
C D
5 -2.301539
8 0.319039
我希望,這是可能的GROUPBY對象,因爲它似乎是一個乾淨和靈活的解決方案。我也打開了一個循環的邏輯條件,但如果可能的話,我想解決它的羣體時尚。提前致謝!
在'for'中解壓縮的元組在Python 3中仍然存在。只有函數參數簽名中的元組解開包裝才被刪除。 – BrenBarn
謝謝@BrenBarn,相應更新。 –
非常感謝您的努力和迄今爲止的答案。但是我還沒有看到如上面框中所示的正確選擇'C'和'D'列的數據的方法 - 如何使用密鑰k [0]和k [1]來實現這個結果? – Number42