我有一個資料框,其中包含一些每日、每月和每周的統計資料和體重減輕情況。

我想創建一個布爾列,其中包含丟失的體重是大于還是小于閾值的資訊。我嘗試使用if回圈 nadnp.where
if df_prod_stats.loc[df_prod_stats['frequency'] == "daily"]:
df_prod_stats['target_met'] =np.where(((df_prod_stats['loss_weight'] < 0.5)),1,0)
elif df_prod_stats.loc[df_prod_stats['frequency'] == "monthly"]:
df_prod_stats['target_met'] =np.where(((df_prod_stats['loss_weight'] < 15)),1,0)
else:
df_prod_stats['target_met'] =np.where(((df_prod_stats['loss_weight'] < 3.5)),1,0)
但我收到一個錯誤:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
uj5u.com熱心網友回復:
我認為你需要以不同的方式做到這一點。我認為您正在嘗試查看每一行以查看它是否每周/每月并相應地檢查損失重量,但這并不是您的代碼實際所做的。在 中if df_prod_stats.loc[...],loc將回傳資料框的一個子集,如果它有資料,它將評估為真,但是你嘗試填充新列的下一行將僅適用于整個原始資料框,而不是行剛好符合loc陳述句。您可以使用以下幾個loc陳述句來實作(我認為)您想要的:
創建 target_met 列并設定為 0:
df_prod_stats['target_met'] = 0
然后使用 .loc 過濾你的第一個 if 陳述句條件(頻率為每天,減重小于 0.5),并將目標滿足為 1:
df_prod_stats.loc[(df_prod_stats['frequency'] == 'daily')
& (df_prod_stats['loss_weight'] < 0.5), 'target_met'] = 1
elif條件(頻率為每月,減重小于15):
df_prod_stats.loc[(df_prod_stats['frequency'] == 'monthly')
& (df_prod_stats['loss_weight'] < 15), 'target_met'] = 1
其他條件(頻率不是每天或每月,并且減肥小于3.5):
df_prod_stats.loc[~(df_prod_stats['frequency'].isin(['daily', 'monthly']))
& (df_prod_stats['loss_weight'] < 3.5), 'target_met'] = 1
放在一起你得到:
df_prod_stats['target_met'] = 0
df_prod_stats.loc[(df_prod_stats['frequency'] == 'daily')
& (df_prod_stats['loss_weight'] < 0.5), 'target_met'] = 1
df_prod_stats.loc[(df_prod_stats['frequency'] == 'monthly')
& (df_prod_stats['loss_weight'] < 15), 'target_met'] = 1
df_prod_stats.loc[~(df_prod_stats['frequency'].isin(['daily', 'monthly']))
& (df_prod_stats['loss_weight'] < 3.5), 'target_met'] = 1
輸出:
frequency loss_weight target_met
0 daily -0.42 1
1 daily -0.35 1
2 daily -0.67 1
3 daily -0.11 1
4 daily -0.31 1
我希望這就是你想要達到的目標。
uj5u.com熱心網友回復:
我發現也可以使用以下簡單的條件集np.where:
df_prod_stats['target_met'] =np.where(((df_prod_stats['loss_weight'] < 0.5) & ( df_prod_stats['frequency'] == "daily")
| (df_prod_stats['loss_weight'] < 15.0) & ( df_prod_stats['frequency'] == "monthly")
| (df_prod_stats['loss_weight'] < 3.5) & ( df_prod_stats['frequency'] == "weekly")),1,0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376362.html
上一篇:Numpy:遞回生成矩陣
