我试图在Pandas列中获得一个累加计数,这有点棘手,在该列中,每个日期和ID号仅增加一个计数一次。
下面的图像将有助于解释,我当前的数据集如下:
ID Date Mention_of_Yes
XDA 11/19/2019 0
XDA 12/19/2019 1
XDA 12/19/2019 1
XDA 1/19/2020 1
XDA 2/19/2020 0
XDA 3/19/2020 1
JJL 11/2/2019 1
JJL 11/2/2019 1
JJL 12/2/20019 0
JJL 1/20/2020 1
我正在尝试以这种特定方式添加一列计数,仅在特定日期每个“是”的一次即可:
ID Date Mention_of_Yes *Correct CumCount
XDA 11/19/2019 0 0
XDA 12/19/2019 1 1
XDA 12/19/2019 1 1** Only Counts Once Per Date (12/19/2019 in this case)
XDA 1/19/2020 1 2
XDA 2/19/2020 0 2
XDA 3/19/2020 1 3
JJL 19/2/2019 0 0
JJL 10/2/2019 0 0
JJL 11/2/2019 1 1
JJL 11/2/2019 1 1** Only Counts Once Per Date (11/2/2019 in this case)
JJL 12/2/20019 0 1
JJL 1/20/2020 1 2
我尝试了groupby和cumcount的不同迭代,但是似乎无法正确配置,就像下面使用的代码一样:
df['Correct_CumCount'] = df.groupby[('ID','Mention_of_Yes')].cumcount()+1
任何帮助将不胜感激!
答案 0 :(得分:3)
您可以在groupby
之后用cumsum
和cumcount
(不是drop_duplicates
)来完成,然后像这样ffill
:
df['Correct_CumCount'] = df.drop_duplicates(subset=['ID', 'Date', 'Mention_of_Yes'],
keep='first')\
.groupby('ID')['Mention_of_Yes'].cumsum()
df['Correct_CumCount'] = df['Correct_CumCount'].ffill().astype(int)
print (df)
ID Date Mention_of_Yes Correct_CumCount
0 XDA 11/19/2019 0 0
1 XDA 12/19/2019 1 1
2 XDA 12/19/2019 1 1
3 XDA 1/19/2020 1 2
4 XDA 2/19/2020 0 2
5 XDA 3/19/2020 1 3
6 JJL 11/2/2019 1 1
7 JJL 11/2/2019 1 1
8 JJL 12/2/20019 0 1
9 JJL 1/20/2020 1 2