数据框中日期更改的自动编号

auto numbering on a date change in dataframe

我想在日期发生变化时在数据框中获取自动增量数字。请有任何建议。 我想要屏幕截图中所附的输出。

每当您调用更改日期的方法时,只需将相应行的 SiNo 值加 1。

这里有一种方法可以满足您的需求,即使您的日期未排序也能正常工作:

In [65]: df = pd.DataFrame(dict(a = [1,2,2,3,3,3,4,4,4,4,5,5,5]))                                                                                                                                                                                                             

In [66]: df                                                                                                                                                                                                                                                                   
Out[66]: 
    a
0   1
1   2
2   2
3   3
4   3
5   3
6   4
7   4
8   4
9   4
10  5
11  5
12  5

In [67]: df['runlen'] = None                                                                                                                                                                                                                                                  

In [68]: for v in df.a.unique(): 
    ...:     df.loc[df.a==v, 'runlen'] = range(1, df[df.a==v].shape[0]+1) 
    ...:                                                                                                                                                                                                                                                                      

In [69]: df                                                                                                                                                                                                                                                                   
Out[69]: 
    a runlen
0   1      1
1   2      1
2   2      2
3   3      1
4   3      2
5   3      3
6   4      1
7   4      2
8   4      3
9   4      4
10  5      1
11  5      2
12  5      3

试试这个:

df['Date'] = pd.to_datetime(df['Date'])
df.assign(SINo=df.groupby('Date').cumcount()+1)

Date    SINo
0   2020-10-08  1
1   2020-10-24  1
2   2020-10-24  2
3   2020-10-24  3
4   2020-10-24  4
5   2020-10-31  1
6   2020-11-08  1
7   2020-11-19  1
8   2020-11-24  1
9   2020-11-24  2
10  2020-12-01  1
11  2020-12-05  1

您可以使用 cumcount 轻松完成:

>>> df["SINo"] = df.groupby("Date").cumcount() + 1
>>> df
         Date  SINo
0  2020-10-08     1
1  2020-10-24     1
2  2020-10-24     2
3  2020-10-24     3
4  2020-10-24     4
5  2020-10-31     1
6  2020-11-08     1
7  2020-11-19     1
8  2020-11-24     1
9  2020-11-24     2
10 2020-12-01     1
11 2020-12-05     1