gpt4 book ai didi

python-3.x - 在 Pandas 数据框中分组并删除重复项

转载 作者:行者123 更新时间:2023-12-05 00:53:44 25 4
gpt4 key购买 nike

我有一个如下的 Pandas 数据框。我想根据所有三列进行分组,并保留 Col1 最大值的组。

import pandas as pd
df = pd.DataFrame({'col1':['A', 'A', 'A', 'A', 'B', 'B'], 'col2':['1', '1', '1', '1', '2', '3'], 'col3':['5', '5', '2', '2', '2', '3']})
df


col1 col2 col3
0 A 1 5
1 A 1 5
2 A 1 2
3 A 1 2
4 B 2 2
5 B 3 3

我的预期输出

  col1 col2 col3
0 A 1 5
1 A 1 5
4 B 2 2
5 B 3 3

我尝试了下面的代码,但它返回了每个组的最后一行,而不是我想按 col3 排序并使用 max col3 保留组

df.drop_duplicates(keep='last', subset=['col1','col2','col3'])


col1 col2 col3
1 A 1 5
3 A 1 2
4 B 2 2
5 B 3 3

例如:这里我想删除第一个组,因为 2 < 5,所以我想保留 col3 为 5 的组

df.sort_values(by=['col1', 'col2', 'col3'], ascending=False)
a_group = df.groupby(['col1', 'col2', 'col3'])
for name, group in a_group:
group = group.reset_index(drop=True)
print(group)

col1 col2 col3
0 A 1 2
1 A 1 2
col1 col2 col3
0 A 1 5
1 A 1 5
col1 col2 col3
0 B 2 2
col1 col2 col3
0 B 3 3

最佳答案

您不能对所有列进行分组,因为您希望为其保留最大值的 col 具有不同的值。相反,不要将该列包含在组中并考虑其他列:

col_to_max = 'col3'
i = df.columns ^ [col_to_max]
out = df[df[col_to_max] == df.groupby(list(i))[col_to_max].transform('max')]

print(out)

col1 col2 col3
0 A 1 5
1 A 1 5
4 B 2 2
5 B 3 3

关于python-3.x - 在 Pandas 数据框中分组并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67217662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com