0

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

   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

4 回答 4

3

使用重复项:

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

print(df)

  Var0  Var1
0    11    22
2     8    36
5     6    12
于 2019-04-14T23:48:14.537 回答
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
于 2019-04-14T23:54:28.360 回答
1

这只是drop_duplicates

df.drop_duplicates('Var0')
Out[230]: 
   Var0  Var1
0    11    22
2     8    36
5     6    12
于 2019-04-15T01:02:05.150 回答
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)])
于 2019-04-15T00:06:04.737 回答