【问题标题】:How do I get only the first element of matching elements from Dataframe without iterating through it?如何仅从 Dataframe 中获取匹配元素的第一个元素而不遍历它?
【发布时间】:2019-04-14 23:43:13
【问题描述】:

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

   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,但不知道在哪里做。 由于速度,我不想遍历数据框。

【问题讨论】:

    标签: python pandas sorting dataframe set


    【解决方案1】:

    使用重复:

    df[~df['Var0'].duplicated()]
    
    print(df)
    
      Var0  Var1
    0    11    22
    2     8    36
    5     6    12
    

    【讨论】:

      【解决方案2】:

      这只是drop_duplicates

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

      【讨论】:

        【解决方案3】:

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

        df = df.groupby('Var0', sort=False, as_index=False).head(1)
        
        print(df)
           Var0  Var1
        0    11    22
        1     8    36
        2     6    12
        

        【讨论】:

        • 只是一个小技巧,也许你可以使用 head(1) 而不是 first ,因为 head 也会记录索引信息,还是一个不错的:-)++
        【解决方案4】:

        另一种方法是使用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)])
        

        【讨论】:

          猜你喜欢
          • 2020-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-13
          • 2020-12-03
          • 2016-10-07
          相关资源
          最近更新 更多