我有一个由两列组成的资料框。A列由字符串组成,B列由数字组成。A 列有我想洗掉的重复项。但是,我只想保留 B 列中编号最高的那些重复项。这是我的资料框的示例:
columnA | columnB
---------------------
a | 1
a | 2
b | 2
b | 1
我想要的是这个:
columnA | columnB
---------------------
a | 2
b | 2
使用 drop_duplicates()
uj5u.com热心网友回复:
您可以descending
根据“columnB”按顺序对资料框进行排序,并drop_duplicates()
在 columnA 上使用,保持第一次出现:
df.sort_values(by='columnB',ascending=False).drop_duplicates('columnA',keep='first')
columnA columnB
13 d 555
27 h 6
16 f 6
6 c 3
1 a 2
2 b 2
15 e 1
示例资料(比您的示例略有增强):
df.to_dict()
{'columnA': {0: 'a',
1: 'a',
2: 'b',
3: 'b',
4: 'c',
5: 'c',
6: 'c',
7: 'd',
8: 'd',
9: 'd',
10: 'd',
11: 'd',
12: 'd',
13: 'd',
14: 'e',
15: 'e',
16: 'f',
17: 'f',
18: 'f',
19: 'f',
20: 'f',
21: 'f',
22: 'h',
23: 'h',
24: 'h',
25: 'h',
26: 'h',
27: 'h'},
'columnB': {0: 1,
1: 2,
2: 2,
3: 1,
4: 1,
5: 2,
6: 3,
7: 33,
8: 223,
9: 3,
10: 2,
11: 1,
12: 3,
13: 555,
14: 1,
15: 1,
16: 6,
17: 5,
18: 4,
19: 3,
20: 2,
21: 1,
22: 1,
23: 2,
24: 3,
25: 4,
26: 5,
27: 6}}
uj5u.com热心网友回复:
按 a 列对资料帧进行分组,仅取 b 列的最大值并通过此方法创建新资料帧也有帮助,因为它保留了原始资料帧的原样。df.groupby('columnA')['columB'].max()
uj5u.com热心网友回复:
只需按“A”分组并取最大的“B”
df.groupby('A').max()
0 评论