2016-10-25 65 views
8

在熊貓數據框中,可以使用函數對其索引進行分組。我正在尋找定義一個函數,而不是應用於列。將函數應用於熊貓數據框組中的第2列由

我期待組兩列,但我需要通過一個任意函數進行分組第二列,foo

group_sum = df.groupby(['name', foo])['tickets'].sum() 

將如何foo被定義爲組第二列分成兩組,例如,通過值是否爲> 0進行劃分?或者,是一種完全不同的方法或語法?

回答

6

Groupby可以接受標籤和系列/數組的任意組合(只要該數組的長度與數據幀的長度相同),因此您可以將該函數映射到列並將其傳遞到組中,如

df.groupby(['name', df[1].map(foo)]) 

或者你可能要爲新列前添加條件,你的數據框的執行GROUPBY,這將會給它的指數名稱的優點是:

df['>0'] = df[1] > 0 
group_sum = df.groupby(['name', '>0'])['tickets'].sum() 
2

像這樣的東西將工作:

x.groupby(['name', x['value']>0])['tickets'].sum() 

像上面提到的那樣,groupby可以接受標籤和系列。這應該給你你正在尋找的答案。這裏是一個例子:

data = np.array([[1, -1, 20], [1, 1, 50], [1, 1, 50], [2, 0, 100]]) 
x = pd.DataFrame(data, columns = ['name', 'value', 'value2']) 
x.groupby(['name', x['value']>0])['value2'].sum() 

name value 
1  False  20 
     True  100 
2  False 100 
Name: value2, dtype: int64 
相關問題