基于日期时间和 ID 的累积计数 Pandas
Datetime and ID Based Cumcount Pandas
我试图在 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
我正在尝试添加一个以这种特定方式计算的列,在特定日期每个 "Mention's of Yes" 仅一次:
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
如有任何帮助,我们将不胜感激!
您可以在 drop_duplicates
之后使用 groupby
和 cumsum
(而不是 cumcount
),然后 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
我试图在 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
我正在尝试添加一个以这种特定方式计算的列,在特定日期每个 "Mention's of Yes" 仅一次:
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
如有任何帮助,我们将不胜感激!
您可以在 drop_duplicates
之后使用 groupby
和 cumsum
(而不是 cumcount
),然后 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