【发布时间】:2021-02-10 22:54:58
【问题描述】:
在按特定列对数据框进行分组后,我想选择分组列的每个键的最后一个值之前的前六个月的日期。 例如,在这个数据框中
df = pd.DataFrame([
{'id': 'thing 1', 'date': '2016-01-01', 'quantity': 1 },
{'id': 'thing 1', 'date': '2016-02-01', 'quantity': 1 },
{'id': 'thing 1', 'date': '2016-09-01', 'quantity': 1 },
{'id': 'thing 1', 'date': '2016-10-01', 'quantity': 1 },
{'id': 'thing 2', 'date': '2017-01-01', 'quantity': 2 },
{'id': 'thing 2', 'date': '2017-02-01', 'quantity': 2 },
{'id': 'thing 2', 'date': '2017-02-11', 'quantity': 2 },
{'id': 'thing 2', 'date': '2017-09-01', 'quantity': 2 },
{'id': 'thing 2', 'date': '2017-10-01', 'quantity': 2 },
])
df.date = pd.to_datetime(df.date, format="%Y-%m-%d")
df
我想选择thing 1的前2行和thing 2的前3行。
我可以找到每个id 的开始和结束日期:
df.groupby('id').date.max()-pd.DateOffset(years=1)
df.groupby('id').date.max()-pd.DateOffset(months=6)
但我找不到选择中间日期的方法。
我最好的(也是幼稚的)尝试如下:
df[(df.groupby('id').date>(df.groupby('id').date.max()-pd.DateOffset(years=1))) & (df.groupby('id').date<(df.groupby('id').date.max()-pd.DateOffset(months=6)))]
返回是可以理解的
TypeError:dtype=datetime64[ns] 和 SeriesGroupBy 之间的比较无效
【问题讨论】:
标签: python pandas datetime pandas-groupby