簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM