numpy 如何基于一维过滤具有多维索引的 Dataframe

qpgpyjmq  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一个使用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)中呢?谢谢。

5sxhfpxr

5sxhfpxr1#

一种解决方案是从索引的date部分创建布尔掩码,并使用它在更新期间屏蔽不相关的行
样例输入 Dataframe

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

相关问题