在函数中使用groupby组名

时间:2016-05-04 20:38:06

标签: python pandas

我的数据类似于:

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))

但无法找出有效的语法。

2 个答案:

答案 0 :(得分:11)

您希望.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

答案 1 :(得分: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