Pandas 根据另一列的日期时间对一列重新编号

Pandas renumber a column from another column's datetime

以下是一组参考编号,它们......相当有缺陷。

        reference      date   subreg
8606    1985-12     1984-08-05  62
8607    1985-11     1984-08-02  62
8608    1985-10     1984-07-30  62
8609    1985-9      1984-05-12  93
8610    1985-8      1983-04-10  93
8611    1985-7      1983-03-02  57
8612    1985-1      1981-04-10  22
8613    1985-5      1980-02-13  51

我希望他们喜欢这个:

        reference      date   subreg
8606    1984-4      1984-08-05  62
8607    1984-3      1984-08-02  62
8608    1984-2      1984-07-30  62
8609    1984-1      1984-05-12  93
8610    1983-2      1983-04-10  93
8611    1983-1      1983-03-02  57
8612    1981-1      1981-04-10  22
8613    1980-1      1980-02-13  51

如何使用 pandas 高效地执行此操作?据我所知,没有问题可以解决这个问题。

试试这个:

df['date'] = pd.to_datetime(df['date'])

df['reference'] = (df['date'].dt.year.astype(str) + 
                   '-' + 
                   (df.sort_values('date')
                      .groupby(df['date'].dt.year)
                      .cumcount()+1).astype(str))

输出:

     reference       date  subreg
8606    1984-4 1984-08-05      62
8607    1984-3 1984-08-02      62
8608    1984-2 1984-07-30      62
8609    1984-1 1984-05-12      93
8610    1983-2 1983-04-10      93
8611    1983-1 1983-03-02      57
8612    1981-1 1981-04-10      22
8613    1980-1 1980-02-13      51

这会起作用

df['reference'] = df['date'].apply(lambda x : x.split('-')[0])
df['RN'] = df.sort_values('date').groupby('reference').cumcount() + 1
df['reference'] = df['reference'] + '-' + df['RN'].astype(str)
df