选择具有相等或更大值的第一个现有行

时间:2018-03-14 10:57:24

标签: python pandas

df

     A    B        C
0  500  515     Jack
1  510  515    Helen
2  520  515  Mathiew
3  530  515   Jordan

我希望在下一个条件下获得新的df1

  • 选择 A = B 的行。
  • 如果它不存在 A = B 的任何行,请选择 A>的第一个现有行。乙

在这种情况下,df1应为:

     A    B        C
2  520  515  Mathiew

我试过了:

df1 = df[df["A"] == df["B"]]

3 个答案:

答案 0 :(得分:1)

首先检查any之间是否至少有一个相等的行,然后按解决方案过滤,如果没有,请获取最大值索引idxmax(必要的唯一索引值):

if (df["A"] == df["B"]).any():
    df1 = df[df["A"] == df["B"]]
else:
    df1 = df.loc[[(df["A"] > df["B"]).idxmax()]]

替代方案是按iloc选择第一行:

if (df["A"] == df["B"]).any():
    df1 = df[df["A"] == df["B"]]
else:
    df1 = df.loc[(df["A"] > df["B"])].iloc[0]

答案 1 :(得分:0)

我不确定df的结构所以我会假设它是一个词典列表

df1 = [row for row in df if row["a"] == row["b"]]
if len(df1) == 0:
    for row in df:
        if row["a"] > row["b"]:
            df1.append(row)
            break

答案 2 :(得分:0)

if (df["A"] == df["B"]).sum() == 0:
    first_bigger = (df["A"] > df["B"]).idxmax()
    new_df = df.iloc[first_bigger : first_bigger+1]
else: 
    new_df = df[df["A"] == df["B"]]
new_df       

如果if (df["A"] == df["B"]).sum()等于零,则表示没有两个项相等,(df["A"] > df["B"]).idxmax()返回A大于B的第一个匹配项。