熊猫日期时间索引与两个以上索引的交集

问题描述

是否可以对 Pandas datetimeindex 使用 groupby 操作?在对下面的索引进行分组时,我想返回每个 groupby 对象的日期交集。我知道有 pandas.DatetimeIndex.intersection - 但是这似乎最适合只比较两个日期时间索引。我正在处理的数据可能有零到多行,具有不同的日期范围,我正在检查日期交叉点。

# example data
df = pd.DataFrame([['2020-01-01','2020-12-31'],['2020-01-01','2020-02-29'],['2020-06-01',['2020-08-01','2020-10-31']],columns=['start','end'],index=list('AABBB'))

# apply period range for each row
df['period_range'] = df.apply(lambda x: pd.date_range(x['start'],x['end']),axis=1)

# example intersection I would like to see for index A
pd.date_range('2020-01-01','2020-12-31').intersection(pd.date_range('2020-01-01','2020-2-28'))

预期结果

A - 代表 1 月 - 2 月的日期时间索引

B - 代表八月至十月的日期时间索引

解决方法

在你的情况下用 Month after date_range ,然后我们找到 list

的交集
df['period_range'] = df.apply(lambda x: pd.date_range(x['start'],x['end'],freq='m').strftime('%B'),axis=1)
out = df.groupby(level=0)['period_range'].apply(lambda x : set.intersection(*map(set,x)))
A             {January,February}
B    {September,October,August}
Name: period_range,dtype: object