使用条件总和创建Pandas DataFrame列

时间:2017-02-02 20:41:59

标签: python pandas dataframe conditional

this关于从条件计算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]
                })

1 个答案:

答案 0 :(得分:3)

只想查看同一个月,因此您可以按month列进行分组,然后在每个组中使用option == "B" count 列进行分组并采取总和,使用求和值来划分单位列(逻辑的翻译):

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

enter image description here