我正试图找出如何为唯一的用户ID获取前30-60天的过滤数据帧。我能够用下面的代码获得前30天
get_first_month = get_first_90.loc[df.groupby('User ID')['Date'].apply(lambda g: g <= g.min() + timedelta(days=30))]
但我没有弄清楚如何指定30-60天。我试过:
get_first_month = get_first_90.loc[df.groupby('User ID')['Date'].apply(lambda g: g.min() + timedelta(days30) > g <= g.min() + timedelta(days60))]
但它返回一个关于序列的真值不明确的错误。我也尝试过一些其他的方法,但是我想不出来。谢谢你的时间
您应该使用
groupby
+transform
将min
最小日期广播回该用户的每一行。然后,您可以为整个数据帧创建一个简单的掩码,检查它是否是between
最小日期和一些偏移量。(这里我将使用2天和3天,但您可以轻松地将其更改为30天和60天,以获得真实数据)样本数据
代码
为了完整起见,下面是分配回数据帧时掩码的外观
行也不需要完全是日期。只要它在[min_datetime+2天,min_datetime+3天]之间,就会被选中
g.min() + pd.Timedelta(days=30)
g.min() + pd.Timedelta(days=60)
date + 30 <= date <= date + 60
(...) & (...)
中,这就是问题中的实现不起作用的原因李>datetime
中的timedelta
不需要导入李>.apply
要快得多李>相关问题 更多 >
编程相关推荐