如何仅从Dataframe中获取匹配元素的第一个元素而不进行迭代?

时间:2019-04-14 23:43:13

标签: python pandas sorting dataframe set

假设我有一个这样的数据框:

   Var0  Var1
0    11    22      <--------- Get 1st element of matching
1    11    84
2     8    36      <--------- Get 1st element of matching
3     8     8
4     8    10
5     6    12      <--------- Get 1st element of matching

我想得到这个结果:

   Var0  Var1
0    11    22
2     8    36
5     6    12

首先,我按sort_values()对数据框进行排序:

df.sort_values(['Var0'], ascending=['False'])

我认为我应该使用set,但不确定在哪里使用。 由于速度原因,我不想遍历数据框。

4 个答案:

答案 0 :(得分:3)

使用重复项:

df[~df['Var0'].duplicated()]

print(df)

  Var0  Var1
0    11    22
2     8    36
5     6    12

答案 1 :(得分:1)

我们还可以使用groupby方法.head

df = df.groupby('Var0', sort=False, as_index=False).head(1)

print(df)
   Var0  Var1
0    11    22
1     8    36
2     6    12

答案 2 :(得分:1)

这仅仅是drop_duplicates

df.drop_duplicates('Var0')
Out[230]: 
   Var0  Var1
0    11    22
2     8    36
5     6    12

答案 3 :(得分:0)

另一种方法是使用pd.Series.searchsorted(或numpy.searchsorted)。

import numpy as np
import pandas as pd

data = pd.DataFrame({'x': [1, 1, 1, 3, 3, 4, 5]})
values = [1, 3, 4, 5]  # we want to find first occurrence indices for these values

common_values = np.intersect1d(data.x.values, values)
print(common_values) # get common values 

print(data.x.searchsorted(common_values))

print(data.loc[data.x.searchsorted(common_values)])