我有两个数据框。其中一个(客户)包含所有具有“ID”和“注册日期”的客户。
id date_joined
123 2019-09-12 17:05:27.916301+00:00
1234 2019-12-29 14:39:34.024478+00:00
1235 2020-03-09 12:47:52.284569+00:00
1236 2020-03-19 10:07:41.222140+00:00
1237 2020-03-19 06:34:25.896585+00:00
在第二个数据框(营业额)中,我有客户 ID 和 year_month 以及 turnover_sum。需要重点指出的是:对于每个客户 ID,该数据框中都有几行,因为它会在很长一段时间内跟踪月周转量。
ID year_month monthly_turnover
264 2019-Oct 0
264 2019-Nov 200
264 2019-Dec 150
264 2020-Jan 30
265 2020-Oct 14
如果 year_month 列中的值早于相应用户的“注册日期”,我想为每个客户做的是,将monthly_turnover 列中的所有值替换为 Nan。
如何实现?我不知道从哪里开始。
答案 0 :(得分:0)
您可以在一行(公认的密集)中完成此操作:
turnover.loc[turnover['year_month'] < customers['date'], 'monthly_turnover'] = np.nan
这一行包含了很多内容,所以让我逐项拆开包装:
turnover['year_month'] < customers['date']
Pandas 知道日期,因此假设您的索引匹配,pandas 可以自动检查一个日期是否在另一个日期之后。该子句将返回一系列 True 和 False。
然后我们将该系列带入 .loc 函数。这将匹配布尔值为 True 的每一行,然后将 'monthly_turnover' 设置为 NaN。
你需要将 numpy 作为 np 导入 np.nan 才能工作。
这给了我以下输出:
如果您需要更多,请告诉我们,希望这会有所帮助!
答案 1 :(得分:0)
我找到了解决问题的方法。我已经合并了两个数据框,然后使用 np.where 条件来比较 year_month 列和 date_joined 列的值。
merged.pf["monthly_turnover"] = np.where(
merged.pf["year_month"] >= merged.pf["date_joined"],
merged.pf["monthly_turnover"], np.nan)
无论如何感谢您的输入