[英]Efficiently relocate elements conditionally in a panda.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"]
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"]
它正在工作,但是对于我的 +40k 行来说它非常慢。 我怎样才能更有效、更优雅地做到这一点? 如果可能的话,我更喜欢直接操纵原始 df 的解决方案。
示例数据:
x1 p1 x2 p2
1 0.4 2 0.6
2 0.2 1 0.8
所需的 output:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.