我有一個使用多維索引的資料框pandas。說employee_id 和日期。現在我想更新特定日期之前的記錄,比如 2020-01-01。為了與其他代碼保持一致,更新是使用np.where. 那么如何將此日期過濾器添加到此作業中,df['Sale'] = np.where(df.sale_actual>df.sale_expect, df.sale_actual, df.sale_expect). 謝謝。
uj5u.com熱心網友回復:
一種解決方案是從索引的一部分創建一個布爾掩碼,date并在更新期間使用它來屏蔽不相關的行
示例輸入資料框
df = pd.DataFrame([[0, '2019-01-01', 100, 200, 0], [1, '2019-02-01', 150, 100, 0], [0, '2021-12-12', 200, 100, 0]], columns=['id', 'date','sale_expect', 'sale_actual', 'sale'])
df['date'] = pd.to_datetime(df['date'])
df = df.set_index(['id', 'date'], drop=True)
sale_expect sale_actual sale
id date
0 2019-01-01 100 200 0
1 2019-02-01 150 100 0
0 2021-12-12 200 100 0
解決方案
mask = df.index.get_level_values(1) < np.datetime64('2020-01-01')
df.loc[mask, 'sale'] = np.where(df[mask].sale_actual>df[mask].sale_expect, df[mask].sale_actual, df[mask].sale_expect)
結果
sale_expect sale_actual sale
id date
0 2019-01-01 100 200 200
1 2019-02-01 150 100 150
0 2021-12-12 200 100 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525356.html
標籤:Python熊猫麻木的
