Python 在panda.Dataframe中有效地有条件地重新定位元素

Python 在panda.Dataframe中有效地有条件地重新定位元素,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试按以下方式对data.frame的值进行排序: for i in range(len(df.index)): if df.at[i, "x1"] <= df.at[i, "x2"]: df2.at[i, "p1"] = df.at[i, "p1"] df2.at[i, "x1"] = df.at[i, "x1"]

我正在尝试按以下方式对data.frame的值进行排序:

for i in range(len(df.index)):
    if df.at[i, "x1"] <= df.at[i, "x2"]:
        df2.at[i, "p1"] = df.at[i, "p1"]
        df2.at[i, "x1"] = df.at[i, "x1"]
        df2.at[i, "x2"] = df.at[i, "x2"]
    else:
        df2.at[i, "p1"] = df.at[i, "p2"]
        df2.at[i, "x1"] = df.at[i, "x2"]
        df2.at[i, "x2"] = df.at[i, "x1"]
期望输出:

x1  p1 x2   p2
1  0.4  2  0.6
1  0.8  2  0.2

下面是一种使用行选择,然后使用该选择交换值的方法

check = df["x1"] > df["x2"]
df.loc[check, ["x2", "x1", "p2", "p1"]] = df.loc[check, ["x1", "x2", "p1", "p2"]].values

下面是一种使用行选择,然后使用该选择交换值的方法

check = df["x1"] > df["x2"]
df.loc[check, ["x2", "x1", "p2", "p1"]] = df.loc[check, ["x1", "x2", "p1", "p2"]].values

这能保持其他列不变吗?是的。它只修改.locIt中的内容。locIt给了我以下错误:KeyError:传递列表喜欢。不再支持带有任何缺少标签的loc或[]。缺少以下标签:Index['a_p2',dtype='object'。听起来像是您为不在pd.DataFrameAh中的列a_p2添加了标签。这是我的错。感谢您提供快速而优雅的解决方案!:这能保持其他列不变吗?是的。它只修改.locIt中的内容。locIt给了我以下错误:KeyError:传递列表喜欢。不再支持带有任何缺少标签的loc或[]。缺少以下标签:Index['a_p2',dtype='object'。听起来像是您为不在pd.DataFrameAh中的列a_p2添加了标签。这是我的错。感谢您提供快速而优雅的解决方案!: