首页 > 解决方案 > 熊猫通过排序日期列使用 groupby 数据框添加列

问题描述

我有以下数据框:

ID 日期
1 2021 年 5 月 4 日 8:17
1 2021 年 5 月 25 日 6:20
1 2021 年 5 月 2 日 22:15
2 2021 年 7 月 12 日 2:20
2 2021 年 7 月 4 日 21:28
2
2

对于重复的 ID,我想将日期从旧到最新排序,然后添加一个新列,该列根据日期标记该 ID 的增量索引。如果没有任何 ID 的日期,只需添加第一个索引。以下是我希望我的新数据框的样子。

ID 日期 指数
1 2021 年 5 月 2 日 22:15 1
1 2021 年 5 月 4 日 8:17 2
1 2021 年 5 月 25 日 6:20 3
2 2021 年 7 月 4 日 2:20 1
2 2021 年 7 月 12 日 21:28 2
2 1
2 1

标签: pythonpandasgroup-by

解决方案


如果在 中缺少值,请先使用to_datetimewith DataFrame.sort_values,然后GroupBy.cumcount使用 with numpy.wherefor set :1Date

df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values(['ID','Date'], ignore_index=True)

df['Index'] = np.where(df['Date'].notna(), df.groupby('ID').cumcount().add(1), 1)
print (df)
   ID                Date  Index
0   1 2021-05-02 22:15:00      1
1   1 2021-05-04 08:17:00      2
2   1 2021-05-25 06:20:00      3
3   2 2021-07-04 21:28:00      1
4   2 2021-07-12 02:20:00      2
5   2                 NaT      1
6   2                 NaT      1

推荐阅读