Python 在panda.Dataframe中有效地有条件地重新定位元素
我正在尝试按以下方式对data.frame的值进行排序: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"]
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添加了标签。这是我的错。感谢您提供快速而优雅的解决方案!: