【问题标题】:Filter multiples in a pandas dataframe过滤熊猫数据框中的倍数
【发布时间】:2016-07-04 15:55:14
【问题描述】:

我的数据可以很容易地转换成看起来像这样的 pandas 数据框:

import pandas as pd
data={'a':["t", "g"]*9,'b' [1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6],'distance':[10, 15, 290, 300, 315, 320, 350, 360, 10, 25, 225, 240, 325, 335, 365, 205, 15, 35]}
df=pd.DataFrame(data,columns=['a','b','distance'])
print df

    a  b  distance
0   t  1        10
1   g  2        15
2   t  3       290
3   g  4       300
4   t  5       315
5   g  6       320
6   t  1       350
7   g  2       360
8   t  3        10
9   g  4        25
10  t  5       225
11  g  6       240
12  t  1       325
13  g  2       335
14  t  3       365
15  g  4       205
16  t  5        15
17  g  6        35

我想删除“b”列中具有相同值的所有行,但保留“距离”列中具有最小值的一行。在这种情况下,我想擦除“距离”大于 200 的所有行,以便在此示例中仅保留索引为 0、1、8、9、16、17 的行。最后,所有的行都应该有不同的“b”值和最小的“距离”。它看起来像:

    a  b  distance
0   t  1        10
1   g  2        15
2   t  3        10
3   g  4        25
4   t  5        15
5   g  6        35

我怎么能这样做?

【问题讨论】:

    标签: pandas dataframe filter


    【解决方案1】:

    groupby on b col 并在 distance 列上调用 idxmin 以索引原始 df:

    In [114]:
    df.loc[df.groupby('b')['distance'].idxmin()]
    
    Out[114]:
        a  b  distance
    0   t  1        10
    1   g  2        15
    8   t  3        10
    9   g  4        25
    16  t  5        15
    17  g  6        35
    

    在这里您可以看到idxmin 返回最小值的索引:

    In [115]:
    df.groupby('b')['distance'].idxmin()
    
    Out[115]:
    b
    1     0
    2     1
    3     8
    4     9
    5    16
    6    17
    Name: distance, dtype: int64
    

    【讨论】:

    • 非常感谢。这是一个非常聪明的解决方案。
    • 如果我的回答解决了您的问题,那么您可以接受它,我的回答左上角会有一个空的勾号
    【解决方案2】:

    试试这个:

     df.groupby('b')['a','b','distance'].min()
    
    
    #      a  b  distance
    #    b                
    #    1  t  1        10
    #    2  g  2        15
    #    3  t  3        10
    #    4  g  4        25
    #    5  t  5        15
    #    6  g  6        35
    
    
    ​
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2019-04-13
      • 2015-05-28
      • 2018-02-06
      • 2018-09-28
      • 1970-01-01
      • 2017-11-20
      相关资源
      最近更新 更多