2016-05-04 90 views
3

GROUPBY組名字,我有數據是這樣的:使用功能

df = pd.DataFrame({'user': np.random.choice(['a', 'b','c'], size=100, replace=True), 
        'value1': np.random.randint(10, size=100), 
        'value2': np.random.randint(20, size=100)}) 

我用它來產生一些結果,例如,

grouped = df.groupby('user') 
results = pd.DataFrame() 
results['value2_sum'] = grouped['value2'].sum() 

對於這個結果數據框,他一列,我想將用戶名傳遞給另一個函數,該函數使用數據框之外的數據。

我想是這樣的:

results['user_result'] = grouped.apply(lambda x: my_func(x.index)) 

但無法弄清楚,工作語法。

回答

6

您希望.name屬性來訪問羣組的索引值:

In [6]: 
grouped = df.groupby('user') 
results = pd.DataFrame() 
results['value2_sum'] = grouped['value2'].sum() 
results['user_result'] = grouped.apply(lambda x: x.name) 
results 

Out[6]: 
     value2_sum user_result 
user       
a   342   a 
b   333   b 
c   308   c 
2
results['user_result'] = results.index.values 

到索引值傳遞給你的函數,你可以用一個列表理解。

def my_func(val): 
    return val + "_" + val 

results['my_func'] = [my_func(idx) for idx in results.index] 

>>> results 
     value2_sum user_result my_func 
user         
a   417   a  a_a 
b   306   b  b_b 
c   331   c  c_c