我有一个包含大量行和列的数据框。以下数据框只是其简化版本。
dct = {'day': ['Mon', 'Tue', 'Wed', 'Wed', 'Thur', 'Fri', 'Fri', 'Sat', 'Sun'],
'id': ['1', '2', '3', '4', '5',
'6', '7', '8', '9']}
df = pd.DataFrame(dct)
day id
0 Mon 1
1 Tue 2
2 Wed 3
3 Wed 4
4 Thur 5
5 Fri 6
6 Fri 7
7 Sat 8
8 Sun 9
我想更改 id 以匹配重复的日期(在这种情况下),但仍然是连续的。
day id
0 Mon 1
1 Tue 2
2 Wed 3
3 Wed 3
4 Thur 4
5 Fri 5
6 Fri 5
7 Sat 6
8 Sun 7
到目前为止,我设法更改了 id,但它们不是连续的,我现在有点卡住了。
m = df['day'].duplicated()
df['id'] = df['id'].mask(m).ffill()
day id
0 Mon 1
1 Tue 2
2 Wed 3
3 Wed 3
4 Thur 5
5 Fri 6
6 Fri 6
7 Sat 8
8 Sun 9
最佳答案
您可以减去 cumsum
duplicated
的值:
# ensure using numeric dtype
df['id'] = df['id'].astype(int)
# subtract duplicated cumsum
df['id'] -= df['day'].duplicated().cumsum()
输出:
day id
0 Mon 1
1 Tue 2
2 Wed 3
3 Wed 3
4 Thur 4
5 Fri 5
6 Fri 5
7 Sat 6
8 Sun 7
中间体:
day id duplicated cumsum id-cumsum
0 Mon 1 False 0 1
1 Tue 2 False 0 2
2 Wed 3 False 0 3
3 Wed 4 True 1 3
4 Thur 5 False 1 4
5 Fri 6 False 1 5
6 Fri 7 True 2 5
7 Sat 8 False 2 6
8 Sun 9 False 2 7
关于python - Pandas 数据帧 : change duplicated rows so the first duplicates are in consecutive order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76199641/