[英]Filter pandas dataframe, row value must be higher than an offset max value of the column, per customer
我有一个包含客户 ID、订单 ID、收入和订单日期的订单 dataframe,如下所示:
客户ID | 订单编号 | 收入 | 订购日期 |
---|---|---|---|
一个 | 1 | 10 | 05-08-2022 |
乙 | 2 | 10 | 04-07-2022 |
C | 3 | 10 | 05-02-2022 |
等等。 我正在尝试复制此 dataframe 但仅保留给定客户订购日期介于最新订购日期和之前三个月之间的每一行。 即条件对于每一行都是可变的。
我试过这样的东西
df_filtered = df.loc[df['Order Date']>=(df.max(['Date Order']- DateOffset(months=3)))]
但是得到错误“TypeError: unsupported operand type(s) for -: 'list' and 'DateOffset'”
我还尝试创建一个单独的 dataframe ,其中我按客户 ID 分组并计算了最近购买前 3 个月的日期。
像这样:
客户ID | Last_purchase_3M |
---|---|
一个 | 05-05-2022 |
乙 | 04-04-2022 |
C | 05-12-2021 |
打算做这样的事情:
df_filtered = df.loc[df['Order Date']>=df_list['last_purchase_3M'] & df['Customer ID'] == df_list['Customer ID']]
但这给了我这个错误“TypeError:&:'int'和'str'不支持的操作数类型”。
我显然不知道我在这里做什么(我也是新手;))
我是在正确的轨道上还是完全错误的?
三是这里的dtype问题
df_filtered = df.loc[df['Order Date']>=(df.max(['Date Order']- DateOffset(months=3)))]
尝试
df['Order Date'] = pd.to_datetime(df['Order Date'])
df_filtered = df.loc[df['Order Date'].ge(df['Order Date'].max()- DateOffset(months=3))]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.