我有一個資料集,我想創建一個新列,該列基于使用帶有 if 條件的 for 回圈劃分的另外兩列。
這是資料集,預先創建了空的“solo_fare”列。
任務是遍歷每一行并將“票價”除以“親戚”以獲得每位乘客的票價。但是,需要遵循某些 if 條件(此類別中的乘客應該看到每名乘客的價格在 3 到 8 之間)

我在這里嘗試過的代碼似乎根本沒有填寫“solo_fare”行。它回傳一個空列(與上面的 df 相同)。
for i in range(0, len(fare_result)):
p = fare_result.iloc[i]['Fare']/fare_result.iloc[i]['relatives']
q = fare_result.iloc[i]['Fare']
r = fare_result.iloc[i]['relatives']
# if relatives == 0, return original Fare amount
if (r == 0):
fare_result.iloc[i]['solo_fare'] = q
# if the divided fare is below 3 or more than 8, return original Fare amount again
elif (p < 3) or (p > 8):
fare_result.iloc[i]['solo_fare'] = q
# else, return the divided fare to get solo_fare
else:
fare_result.iloc[i]['solo_fare'] = p
我怎樣才能讓它作業?
uj5u.com熱心網友回復:
您可能不應該為此使用回圈,而只是使用loc
如果您首先創建“solo fare”列并為每一行提供 Fare 的默認值,那么您可以更改您設定的條件的值
fare_result['solo_fare'] = fare_result['Fare']
fare_results.loc[(
(fare_results.Fare / fare_results.relatives) >= 3) & (
(fare_results.Fare / fare_results.relatives) <= 8), 'solo_fare'] = (
fare_results.Fare / fare_results.relatives)
uj5u.com熱心網友回復:
您是否嘗試先初始化這些新列?
我的意思是該陳述句fare_result.iloc[i]['solo_fare'] = q
僅意味著您將值 q 分配給solo_farei 行的欄位
那里的問題是,此時, i 行沒有任何solo_fare密鑰。因此,您只在此處填寫表格的最后一個值。
要解決此問題,請嘗試solo_fare在 for 回圈之前宣告列,例如:
fare_result['solo_fare'] = np.nan
uj5u.com熱心網友回復:
一種方法是定義一個逐行函式,并將其應用于資料框:
# row-wise function (mockup)
def foo(fare, relative):
# your logic here. Mine just serves as example
if relative > 100:
res = fare/relative
elif (relative < 10):
res = fare
else:
res = 10
return res
然后將其應用于資料框(逐行):
fare_result['solo_fare'] = fare_result.apply(lambda row: foo(row['Fare'], row['relatives']) , axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464028.html
上一篇:R子集資料幀遵循基于日期的規則
