我有一个这样的数据框:
ID type value
1 A 8
2 A 5
3 B 11
4 C 12
5 D 1
6 D 22
7 D 13
我想过滤数据框,以便我有唯一出现的“类型”attrybute(例如,A 只出现一次),如果有更多行具有相同的“类型”值,我想选择一个具有更高的值(value)。 我想得到类似的东西:
ID type value
1 A 8
3 B 11
4 C 12
6 D 22
我如何用 pandas 做到这一点?
最佳答案
一种方法是对数据框进行排序,然后在 groupby 之后取第一个。
# first way
sorted = df.sort_values(['type', 'value'], ascending = [True, False])
first = sorted.groupby('type').first().reset_index()
另一种方法不一定只取第一个,所以它可能会使所有 ID 对应于相同的最大值(而不是只取其中的一个)
# second way
grouped = df.groupby('type').agg({'value': max}).reset_index()
grouped = grouped.set_index(['type','value'])
second = grouped.join(df.set_index(['type', 'value']))
例子:
数据
ID type value
1 A 8
2 A 5
3 B 11
4 C 12
5 D 1
6 D 22
7 D 13
8 D 22
第一种方法结果
type ID value
A 1 8
B 3 11
C 4 12
D 6 22
第二种方法保持ID=8
ID
type value
A 8 1
B 11 3
C 12 4
D 22 6
22 8
(如果你不喜欢多索引,你可以在这里再次reset_index()
)
关于python - Pandas ,如何过滤 df 以获得独特的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21402485/