python - Pandas ,如何过滤 df 以获得独特的条目?

标签 python numpy pandas dataframe

我有一个这样的数据框:

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/

相关文章:

python - 如何在 Django 数据迁移中创建新对象?

python - 使用PythonKit快速调用Python

python - 将列表转换为 ListNode

python - 根据行/列条件创建 DataFrame 掩码

python - 将数据帧类型转换为 Python 类型或只是序列化的一种方式

python - 将 pandas csv 保存到子目录

python - 使用 MLP 分类器,类的精度为零

python - mpmath 中的元素运算比 numpy 慢及其解决方案

python - 通过比较两个不同形状的 Numpy 数组的值来计算掩码

python - Pandas groupby : divide last in group by first in group