Pandas 具有相同值的密集排名,按顺序排列

问题描述 投票:0回答:1

我在 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)

有人可以帮助我吗?

python pandas
1个回答
0
投票

用途:

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
© www.soinside.com 2019 - 2024. All rights reserved.