将使用pandas group by计算的总和应用于组的所有元素

时间:2015-08-03 11:24:48

标签: python pandas group-by dataframe

我正在使用pandas模块。我的数据框有5个字段。

最初的3个字段是帐号,月份和工资。我想找到月工资的百分比,假设总工资是100%。 为了做到这一点,我想在DataFrame上使用group by。将按帐户分组并计算所有月份收到的工资总额。我有DataFrameGroupBy对象的原始DataFrame,但无法理解如何将工资与从组中收到的金额除以。

请建议我如何在一个帐户的所有行上应用金额。

1 个答案:

答案 0 :(得分:1)

您可以使用groupby/transform计算每个组的每一行的值:

df['percent salary'] = df.groupby(['account'])['salary'].transform(
                           lambda x: x/x.sum())

例如,

import numpy as np
import pandas as pd
np.random.seed(2015)
df = pd.DataFrame(np.random.randint(10, size=(10, 2)),
                  columns=['account', 'salary'])
df['percent salary'] = df.groupby(['account'])['salary'].transform(lambda x: x/x.sum())

print(df)

产量

   account  salary  percent salary
0        2       2             0.4
1        9       6             1.0
2        8       5             1.0
3        7       8             0.5
4        0       6             1.0
5        7       8             0.5
6        3       8             1.0
7        6       9             1.0
8        2       3             0.6
9        1       2             1.0