Pandas DataFrame:仅保留行A的每个值的B列最小的行

时间:2019-07-12 11:40:27

标签: python pandas

我有一个巨大的csv文件,里面充满了测量结果,我需要过滤什么,我很好奇这是最优雅,简短或Pythonic的方法,因为我脑海中浮现出的解决方案是对我有点野蛮:

  1. 创建“ a”的值列表
  2. 遍历每个值并选择具有最小“ b”值的行
  3. 将此行添加到新的数据框中。

必须有一种更好的方法。

下面以MWE为例进行演示:

    # dict = {'a': [1,1,1,2,2,2,3,3,3], 'b': np.random.rand(9), 'c': np.random.rand(9)}
    dict = {'a': [1, 1, 1, 2, 2, 2, 3, 3, 3], 
            'b': [0.44 , 0.21, 0.86, 0.79, 0.64, 0.97, 0.51, 0.47, 0.61], 
            'c': [0.94, 0.31, 0.78, 0.10, 0.29, 0.14, 0.66 , 0.61 , 0.43]
            }
    df = pd.DataFrame(dict)

具有更好可读性的数据框:

>>> df
   a     b     c
0  1  0.44  0.94
1  1  0.21  0.31
2  1  0.86  0.78
3  2  0.79  0.10
4  2  0.64  0.29
5  2  0.97  0.14
6  3  0.51  0.66
7  3  0.47  0.61
8  3  0.61  0.43

我正在寻找一种获取数据框的方法,其中每个“ a”元素的每个元素仅保留“ b”值最小的行,其余的将被丢弃。在上面的MWE案例中是

   a     b     c
1  1  0.21  0.31
4  2  0.64  0.29
7  3  0.47  0.61

0 个答案:

没有答案