使用条件总和的结果创建 Pandas DataFrame 列

Creating a Pandas DataFrame Column with Results from the Sum of a Condition

关于根据条件计算 DataFrame 值的 问题,我有一个更复杂的问题,关于根据我正在努力解决的给定行的该条件包含总和。这是初始 df:

Key UID VID count   month   option  unit    year
0   1   5   100     1       A       10      2015
1   1   5   200     1       B       20      2015
2   1   5   300     2       A       30      2015
3   1   5   400     2       B       40      2015
4   1   7   450     2       B       45      2015
5   1   5   500     3       B       50      2015

我希望遍历这个时间序列 DataFrame,为每一行添加一列 'unit_count',将 'unit' 的值除以该月 'count' 的总和仅在选项为 'B' 的情况下。本质上:

df['unit_count'] = df['unit'] / sum of df['count'] for all records containing 'option' 'B' in the same month

这将按如下方式附加 DataFrame:

Key UID VID count   month   option  unit    year    unit_count
0   1   5   100     1       A       10      2015    0.050
1   1   5   200     1       B       20      2015    0.100
2   1   5   300     2       A       30      2015    0.035
3   1   5   400     2       B       40      2015    0.047
4   1   7   450     2       B       45      2015    0.053
5   1   5   500     3       B       50      2015    0.100

上面例子df的代码是:

df = pd.DataFrame({'UID':[1,1,1,1,1,1],
                   'VID':[5,5,5,5,7,5],
                'year':[2015,2015,2015,2015,2015,2015],
                'month':[1,1,2,2,2,3],
                'option':['A','B','A','B','B','B'],
                'unit':[10,20,30,40,45,50],
                'count':[100,200,300,400,450,500]
                })

只想查看同一个月,因此您可以按 month 列分组,然后在每个组中使用 option == "B"count[=20 进行子集化=]列求和,用求和的值除unit列(翻译你的逻辑):

df['unit_count'] = df.groupby('month', group_keys=False).apply(
                      lambda g: g.unit/g['count'][g.option == "B"].sum())
df