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

4

我希望在一列数据上应用自定义操作,通过对另一列的值进行分组。按列分组以获取计数,然后将该列中的所有分组记录的另一列值除以该计数。

我的数据框架:

   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,有三名员工参与工作(b,c,d)。 因此,金额应按以下方式共享 30/3 = 10

最终输出的数据框:

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

什么是最好的做法?

1
相关:https://dev59.com/vWAg5IYBdhLWcg3wnMG3 - EdChum
2个回答

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)

执行相似的操作。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接