代码之家  ›  专栏  ›  技术社区  ›  Josh Friedlander

在相同形状的两个数据帧之间查找较大的行

  •  0
  • Josh Friedlander  · 技术社区  · 6 年前

    我有两个相同形状的数据帧,正在尝试查找dfa中的所有行 每个值 大于df B中的对应行。

    df_A = pd.DataFrame({'one':[20,7,2],'two':[11,9,1]})
    df_B = pd.DataFrame({'one':[1,8,12],'two':[10,5,3]})
    

    我只想返回第0行。

        one     two
    0   20      11
    

    df_A > df_B 大多数情况下我都能理解,但我就是不知道如何只返回那些所有内容都在其中的行 True

    4 回复  |  直到 6 年前
        1
  •  1
  •   Antonio Andrés    6 年前
    df_A.loc[(df_A > df_B).all(axis=1)]
    
        2
  •  3
  •   Zero    6 年前

    IIUIC,你可以用 all

    In [633]: m = (df_A > df_B).all(1)
    
    In [634]: m
    Out[634]:
    0     True
    1    False
    2    False
    dtype: bool
    
    In [635]: df_A[m]
    Out[635]:
       one  two
    0   20   11
    
    In [636]: df_B[m]
    Out[636]:
       one  two
    0    1   10
    
    In [637]: pd.concat([df_A[m], df_B[m]])
    Out[637]:
       one  two
    0   20   11
    0    1   10
    

    或者,如果您只需要行索引。

    In [642]: m.index[m]
    Out[642]: Int64Index([0], dtype='int64')
    
        3
  •  1
  •   rocksportrocker    6 年前
    import pandas as pd
    
    df_A = pd.DataFrame({"one": [20, 7, 2], "two": [11, 9, 1]})
    df_B = pd.DataFrame({"one": [1, 8, 12], "two": [10, 5, 3]})
    
    row_indices = (df_A > df_B).apply(min, axis=1)
    
    print(df_A[row_indices])
    print()
    print(df_B[row_indices])
    

    输出为:

       one  two
    0   20   11
    
       one  two
    0    1   10
    

    说明:

    df_A > df_B 比较元素,结果如下:

         one    two
    0   True   True
    1  False   True
    2  False  False
    

    蟒蛇 max 解释 True &燃气轮机; False ,所以申请 min 行(这就是我使用 axis=1 )只计算 是的 如果一行中的两个值都是 是的

    0     True
    1    False
    2    False
    

    现在,这是一个用于从中提取行的布尔索引 df_A df_B .

        4
  •  1
  •   DataPsycho    6 年前

    如果你感兴趣的话,可以用一行代码完成。

    df_A[(df_A > df_B)].dropna(axis=0, how='any')
    

    在这里 df_A[(df_A > df_B)] 在匹配true或false后给出输出 na .

        one   two
    0  20.0  11.0
    1   NaN   9.0
    2   NaN   NaN
    

    axis 如果至少有 any 不是数值。