Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫,如何过滤df以获得唯一的条目?_Python_Numpy_Pandas_Dataframe - Fatal编程技术网

Python 熊猫,如何过滤df以获得唯一的条目?

Python 熊猫,如何过滤df以获得唯一的条目?,python,numpy,pandas,dataframe,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 我想过滤数据帧,这样我就有了唯一的“type”attrybute(例如,a只出现一次),如果有更多的行具有相同的“type”值,我想选择一个值更高的行。 我想得到这样的东西: ID type value 1 A 8 3 B 11 4 C 12 6

我有这样一个数据帧:

ID  type value
1   A    8
2   A    5
3   B    11
4   C    12
5   D    1
6   D    22
7   D    13
我想过滤数据帧,这样我就有了唯一的“type”attrybute(例如,a只出现一次),如果有更多的行具有相同的“type”值,我想选择一个值更高的行。 我想得到这样的东西:

ID  type value
1   A    8
3   B    11
4   C    12
6   D    22
如何处理熊猫?

使用groupby“type”并仅抓取第一个对象-
df.groupby(“type”).first()

# first way
sorted = df.sort_values(['type', 'value'], ascending = [True, False])

first = sorted.groupby('type').first().reset_index()
另一种方法不一定只采用第一种方法,因此可能会使所有ID对应于相同的最大值(而不是仅采用其中的一个)

例如:

资料

第一种方法导致

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()


这通常是有效的,如果您想要有更多的列,您可以选择感兴趣的列,在我们的例子中,我们选择了all,‘type’、‘value’

我喜欢我的方式。因为groupby将创建新的df。您将获得唯一的值。但从技术上讲,这不会过滤你的df,这将创建一个新的df。我的方法将保持你的索引不变,你将得到相同的df,但没有重复

df = df.sort_values('value', ascending=False)
# this will return unique by column 'type' rows indexes
idx = df['type'].drop_duplicates().index
#this will return filtered df
df.loc[idx,:]

美好的这样我就失去了ID。我怎样才能恢复以前的布局?回答得很好。还有一个问题。实际上,我的idex是id,它们是唯一的标识符字符串,如“M_001”,我如何恢复这些索引?将其另存为一个额外的列,然后将其指定为索引?从上面开始,我会做
第二步。reset_index()。set_index('ID')
,如果你能提供一些口头信息,你的答案将更加丰富。除了@scriptmonster所说的,当用公认的答案回答旧问题时,解释为什么你的方法比这个答案更受欢迎是非常有用的。谢谢你的建议。
            ID
type value    
A    8       1
B    11      3
C    12      4
D    22      6
     22      8
df[['type', 'value']].drop_duplicates(subset=['type'])
df = df.sort_values('value', ascending=False)
# this will return unique by column 'type' rows indexes
idx = df['type'].drop_duplicates().index
#this will return filtered df
df.loc[idx,:]