2017-05-05 187 views
-3

數據集示例列:[「A」,「B」,「C」,「D」,「num1」,「num2」]。所以我有6列 - 前4個分組和前2個是數字,手段將根據groupBy語句進行計算。 我想組合所有可能的4個分組列的組合。 我希望避免顯式鍵入groupBy [「A」,「B」,「C」,「D」],然後groupBy [「A」,「B」,「D」,「C」]等所有可能的groupBy 。 我是Python新手 - 在python中,我怎樣才能在一個循環中自動化分組,以便它對所有可能的組合進行groupBy calc計算 - 在這種情況下,4 * 3 * 2 * 1 = 24個組合? Ta。GroupBy所有可能的排列組合

感謝您的幫助。任何想法爲什麼'a ='部分不起作用?

import itertools 
import pandas as pd 
import numpy as np 
df = pd.DataFrame(np.random.randint(0,10,size=(100, 5)), columns=list('ABCDE')) 
group_by_vars = list(df.columns)[0:4] 
perms = [perm for perm in itertools.permutations(group_by_vars)] 
print list(itertools.combinations(group_by_vars,2)) 
a = [x for x in itertools.combinations(group_by_vars,group_by_n+1) for group_by_n in range(len(group_by_vars))] 

a沒有錯誤我只是得到一個空的對象。爲什麼??? 類似[comb for itertools.combinations(group_by_vars,2)]中的內容很容易,但如何在range(len(group_by_vars))中爲group_by_n得到a = [x for itertools.combinations(group_by_vars,group_by_n + 1) )] ??

回答

0

當您通過['A', 'B', 'C', 'D']進行分組並計算平均值時,您會得到一個特定組(a0, b0, c0, d0),平均值爲m0

當您按['A', 'B', 'D', 'C']排列列和組時,您將得到一個特定組(a0, b0, d0, c0),平均值爲m0

實際上那些m0是一樣的。所有的團體都是一樣的。您將爲每個置換複製相同的精確計算...您只有4個!爲元組排序的方法...爲什麼?然後

+0

沒錯的列表。真相被告知,我希望從這4個組中的所有2個和3個變量排列組,然後由4個組組成。我只是不想將所有這些細節添加到問題的基礎上,因爲它比任何東西都更容易填充。真相被告知我只是想知道什麼時候我說了10個變量 - 我會比自動更快地自動執行groupBy。也許我應該更清楚一點,所以我爲此道歉。你的觀點很棒。亮點是我們忽略了這些分組的順序,我相信未來的讀者會很欣賞。 – jc52766

0
from itertools import permutations 

perms = [perm for perm in permutations(['A','B','C','D'])] 

燙髮將所有可能的排列24

+0

感謝您的幫助。任何想法爲什麼這不起作用?進口itertools 進口熊貓作爲PD 進口numpy的作爲NP DF = pd.DataFrame(np.random.randint(0,10,大小=(100,5)),柱=列表( 'ABCDE')) group_by_vars =列表(df.columns)[0:4] 燙髮= [燙髮用於燙髮在排列(group_by_vars)] 打印列表(itertools.combinations(group_by_vars,2)) 一個= [itertools.combinations(group_by_vars ,group_by_n + 1)for group_by_n in range(len(group_by_vars))] – jc52766

+0

您應該更新與此信息的問題,以便代碼格式正確,或發佈一個新的問題。無論哪種方式,確保包括具體的錯誤,並儘可能準確地與問題。 –

+0

並確保標記接受的答案,無論哪種解決方案幫助你:) @ jc52766 –