簡體   English   中英

嘗試遍歷熊貓數據框的行並在滿足條件時編輯行

[英]Trying to iterate through rows of pandas dataframe and edit row if it satisfies a condition

我附上了我的數據框的圖像,以及我嘗試過的方法的代碼。 我的目標是如果該行滿足條件,則將一行中的前半部分值與該行中的后半部分值切換。

第一種方法檢查條件是否為真(需要切換值),然后將新值直接分配給原始數據幀。

第二種方法檢查條件是否為真(需要切換值)並將值添加到兩個單獨的數據幀中。 如果條件不成立,我將原始值添加到 df1 和 df2。 在塊的末尾,我計划再次將數據幀組合在一起。

然而,這兩種方法都需要很長時間才能運行,而且似乎必須有更有效的方法。 我很難找到最有效的在線方式,如果有任何幫助,我將不勝感激。 謝謝!

數據框

方法一:

finalGameID = list(final.loc[:,'GameID'])
for i,v in enumerate(finalGameID):
  if final['HomeAway'][i] == 0:
    print(v)
    values = final.loc[i].values
    value1 = list(values[4:124])
    value2 = list(values[124:])
    final.iloc[i,4:124] = value2
    final.iloc[i,124:] = value1

方法二:

df1 = final[final.columns[4:124]]
df2 = final[final.columns[124:]]
df3 = final[final.columns[0:4]]
df1 = df1[0:0]
df2 = df2[0:0]
finalGameID = list(final.loc[:,'GameID'])

for i,v in enumerate(finalGameID):
    values = final.loc[i].values
    value1 = list(values[4:124])
    value2 = list(values[124:])
    if final['HomeAway'][i] == 0:
        print(v)
        df1.loc[len(df1.index)] = value2
        df2.loc[len(df2.index)] = value1
    else:
        df1.loc[len(df1.index)] = value1
        df2.loc[len(df2.index)] = value2

您的方法很慢,因為您遍歷行並使用中間副本。

您應該能夠使用布爾索引進行直接交換:

mask = final['HomeAway'].eq(0)

final.loc[mask, 4:124], final.loc[mask, 124:] = final.loc[mask, 124:], final.loc[mask, 4:124]

您正在處理的數據未知,我已嘗試使用重復數據復制您的問題。 在項目中使用時更改變量和索引值

代碼

import pandas as pd
import numpy as np

data = pd.DataFrame({"HomeAway": [1, 1, 0, 0, 1],
                     "Value1": [14, 16, 29, 22, 21],
                     "Value2": [8, 14, 24, 14, 19],
                     "Value3": [6, 2, 5, 8, 2],
                     "Value4": [3, 3, 2, 2, 0]})

print("BEFORE")
print(data)

left = np.asanyarray(data[data["HomeAway"] == 0].iloc[:, 1:3])
right = np.asanyarray(data[data["HomeAway"] == 0].iloc[:, 3:5])

data.iloc[data["HomeAway"] == 0, 1:3] = right
data.iloc[data["HomeAway"] == 0, 3:5] = left

print("AFTER")
print(data)

輸出

BEFORE

   HomeAway  Value1  Value2  Value3  Value4
0         1      14       8       6       3
1         1      16      14       2       3
2         0      29      24       5       2
3         0      22      14       8       2
4         1      21      19       2       0

AFTER

   HomeAway  Value1  Value2  Value3  Value4
0         1      14       8       6       3
1         1      16      14       2       3
2         0       5       2      29      24
3         0       8       2      22      14
4         1      21      19       2       0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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