GroupBy一列,对pandas

时间:2016-08-10 15:05:43

标签: python pandas apply

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

我的数据框:

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

我的情景:

  • 对于opp = 1,两个人工作(a,b)。所以应该分享金额 10/2 = 5
  • 对于opp = 2,两个emp工作(b,c,d)。所以金额应该是这样的 30/3 = 10

最终输出DataFrame:

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

最好的方法是什么

2 个答案:

答案 0 :(得分:5)

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)

做类似的事情。

答案 1 :(得分:3)

您可以尝试这样的事情:

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