使用条件总和的结果创建 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
关于根据条件计算 DataFrame 值的
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