Reputation: 647
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
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
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
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