我在 Pandas 中有以下 DataFrame:
身份证 | 快照_日期 | 行_哈希 |
---|---|---|
qwe | 2024 年 1 月 1 日 | 123 |
qwe | 2024 年 1 月 3 日 | 456 |
qwe | 2024 年 1 月 5 日 | 456 |
qwe | 2024 年 1 月 7 日 | 123 |
注意:row_hash 在 2024 年 1 月 7 日又变回了
我想创建3个组(就像SQL中的窗口函数),但我无法得到所需的结果:
身份证 | 快照_日期 | 行_哈希 | 我得到了密集等级 | 需要dense_rank |
---|---|---|---|---|
qwe | 2024 年 1 月 1 日 | 123 | 1 | 1 |
qwe | 2024 年 1 月 3 日 | 456 | 1 | 2 |
qwe | 2024 年 1 月 5 日 | 456 | 2 | 2 |
qwe | 2024 年 1 月 7 日 | 123 | 2 | 3 |
我尝试用代码创建它:
snapshot_df['dense_rank'] = snapshot_df.groupby(['ID', 'row_hash'])['snapshot_date'].rank(
method='dense').astype(int)
有人可以帮助我吗?
用途:
cols = ['ID', 'row_hash']
df['dense_rank'] = df[cols].ne(df[cols].shift()).any(axis=1).cumsum()
print (df)
ID snapshot_date row_hash dense_rank
0 qwe Jan 01 2024 123 1
1 qwe Jan 03 2024 456 2
2 qwe Jan 05 2024 456 2
3 qwe Jan 07 2024 123 3