两个值匹配pandas时的累计计数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个值匹配pandas时的累计计数相关的知识,希望对你有一定的参考价值。
我正在尝试创建一个新的Column
,在单独的cumulative count
中显示基于值的columns
。
所以对于下面的代码,我正在尝试根据Cause
和Answer
Columns
创建两个新列。因此,对于Column Answer
中的值,如果In
位于Column Cause
,我想在新列中提供累积计数。
import pandas as pd
d = ({
'Cause' : ['In','','','In','','In','In'],
'Answer' : ['Yes','No','Maybe','No','Yes','No','Yes'],
})
df = pd.DataFrame(d)
输出:
Answer Cause
0 Yes In
1 No
2 Maybe
3 No In
4 Yes
5 No In
6 Yes In
预期产出:
Answer Cause Count_No Count_Yes
0 Yes In 1
1 No
2 Maybe
3 No In 1
4 Yes
5 No In 2
6 Yes In 2
我尝试过以下但是出错了。
df['cumsum'] = df.groupby(['Answer'])['Cause'].cumsum()
答案
没有for循环: - )
s=df.loc[df.Cause=='In'].Answer.str.get_dummies()
pd.concat([df,s.cumsum().mask(s!=1,'')],axis=1).fillna('')
Out[62]:
Answer Cause No Yes
0 Yes In 1
1 No
2 Maybe
3 No In 1
4 Yes
5 No In 2
6 Yes In 2
另一答案
这是一种方式 -
for val in ['Yes', 'No']:
cond = df.Answer.eq(val) & df.Cause.eq('In')
df.loc[cond, 'Count_' + val] = cond[cond].cumsum()
df
# Cause Answer Count_Yes Count_No
#0 In Yes 1.0 NaN
#1 No NaN NaN
#2 Maybe NaN NaN
#3 In No NaN 1.0
#4 Yes NaN NaN
#5 In No NaN 2.0
#6 In Yes 2.0 NaN
以上是关于两个值匹配pandas时的累计计数的主要内容,如果未能解决你的问题,请参考以下文章
在 pandas / python 中对条件值进行分组和计数
合并具有来自两个不同列的匹配值的 DataFrame - Pandas [重复]