Tie_24
Tie_24

Reputation: 647

Select first existing row with equal or greater value

df

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

I want to get a new df1 with next conditions:

In this case, df1 should be:

     A    B        C
2  520  515  Mathiew

I´ve tried:

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

Upvotes: 2

Views: 47

Answers (3)

jezrael
jezrael

Reputation: 862761

First check if at least one equal row by any and then filter by your solution, if not, get idxmax for index of max value (necessary unique index values):

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

Alternative is select first row by iloc:

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

Upvotes: 1

M. Mansour
M. Mansour

Reputation: 566

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 if (df["A"] == df["B"]).sum() is equal to zero, that means no two items are equal, (df["A"] > df["B"]).idxmax() return the first occurrence where A is bigger than B.

Upvotes: 0

dangee1705
dangee1705

Reputation: 3520

I'm not sure the structure of df so I will assume it is an list of dicts

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

Upvotes: 0

Related Questions