Groupby和Lambda在一起

时间:2019-06-22 13:22:12

标签: python

假设我们有一个这样的数据框:

df = pd.DataFrame({'Bins':[(0,10),(11,20), (0,10), (21,30)],
                  'Age':[14,17,18, 15]})
    Bins        Age
0   (0, 10)     14
1   (11, 20)    17
2   (0, 10)     18
3   (21, 30)    15

现在,我们要对Bins上的此数据帧进行分组,并且还要加电Age值并将结果放入新列中。这是我用于此目的的代码:

df['New'] = df.groupby('Bins')['Age'].apply(lambda i:np.power(i,2))

但是结果不是我期望看到的。由于它没有将结果分为3个不同的箱:

Bins         Age     New
0   (0, 10)  14      196
1   (11, 20) 17      289
2   (0, 10)  18      324
3   (21, 30) 15      225

1 个答案:

答案 0 :(得分:1)

如果我正确理解需求,则在分组时,如果一个仓有多个值,则必须定义要执行的操作。我认为您的意思是:

  1. groupby()
  2. sum()或mean()
  3. apply()

示例:

In [17]: df.groupby('Bins')['Age'].sum().apply(lambda i:i**2)
Out[17]:
Bins
(0, 10)     1024
(11, 20)     289
(21, 30)     225
Name: Age, dtype: int64

sum()为您提供:

In [18]: df.groupby('Bins')['Age'].sum()
Out[18]:
Bins
(0, 10)     32
(11, 20)    17
(21, 30)    15
Name: Age, dtype: int64

现在将幂加到求和结果上。

如果您认为更合理,则可以用mean()替换