python - 熊猫通过排序日期列使用 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 |
解决方案
如果在 中缺少值,请先使用to_datetime
with DataFrame.sort_values
,然后GroupBy.cumcount
使用 with numpy.where
for set :1
Date
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
推荐阅读
- html - 用 getelemtentsbyid 计算表中有多少元素
- javascript - Javascript MVC:在控制器内部调用的模型方法返回 udefined -> 但为什么呢?
- javascript - jQuery:如何按类名循环 kendo ui 下拉列表?
- ruby - 如何在自定义 DSL 中使用 rspec 模拟方法
- java - Java stax:3字节UTF-8序列的无效字节2
- python-3.x - 在 Python 中从网页中提取表格
- c# - C# 查找与被单击的面板相邻的面板
- visual-studio - 无法在 Visual Studio 2019 中调试使用 Visual Studio 2017 创建的 Xamarin 项目
- .net - 如何通过 Traefik 从外部网络(Docker 容器外部)发出 gRPC 请求?
- mysql - 如何将主键作为外键引用到各种表