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
以下是一组参考编号,它们......相当有缺陷。
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