df
A B C
0 500 515 Jack
1 510 515 Helen
2 520 515 Mathiew
3 530 515 Jordan
我希望在下一个条件下获得新的df1
:
在这种情况下,df1
应为:
A B C
2 520 515 Mathiew
我试过了:
df1 = df[df["A"] == df["B"]]
答案 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的第一个匹配项。