GroupBy一列,对pandas中分组记录的另一列进行自定义操作

GroupBy one column, custom operation on another column of grouped records in pandas

我想通过对另一列的值进行分组来对一列应用自定义操作。按列分组以获得计数,然后将所有分组记录的另一列值除以该计数。

我的数据框:

   emp opp amount
0  a   1   10
1  b   1   10
2  c   2   30
3  b   2   30
4  d   2   30

我的场景:

最终输出数据帧:

      emp opp amount
    0  a   1   5
    1  b   1   5
    2  c   2   10
    3  b   2   10
    4  d   2   10

最好的做法是什么

df['amount'] = df.groupby('opp')['amount'].transform(lambda g: g/g.size)

df
#  emp  opp amount
# 0  a    1      5
# 1  b    1      5
# 2  c    2     10
# 3  b    2     10
# 4  d    2     10

或者:

df['amount'] = df.groupby('opp')['amount'].apply(lambda g: g/g.size)

做类似的事情。

您可以尝试这样的操作:

df2 = df.groupby('opp').amount.count()
df.loc[:, 'calculated'] = df.apply( lambda row: \
                                  row.amount / df2.ix[row.opp], axis=1)
df

产量:

  emp  opp  amount  calculated
0   a    1      10           5
1   b    1      10           5
2   c    2      30          10
3   b    2      30          10
4   d    2      30          10