我有一个使用pandas的具有多维索引的 Dataframe 。假设Employee_id和Date。现在我想要更新特定日期之前的记录,比如2020-01-01。为了与其他代码一致,更新使用了np.where。那么,如何将此日期过滤器添加到此赋值df['Sale'] = np.where(df.sale_actual>df.sale_expect, df.sale_actual, df.sale_expect)中呢?谢谢。
pandas
np.where
df['Sale'] = np.where(df.sale_actual>df.sale_expect, df.sale_actual, df.sale_expect)
5sxhfpxr1#
一种解决方案是从索引的date部分创建布尔掩码,并使用它在更新期间屏蔽不相关的行样例输入 Dataframe
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
1条答案
按热度按时间5sxhfpxr1#
一种解决方案是从索引的
date
部分创建布尔掩码,并使用它在更新期间屏蔽不相关的行样例输入 Dataframe
解
结果