Pandas datetimeindex 与两个以上的索引相交
Pandas datetimeindex intersection with more than two indexes
是否可以将 groupby 操作与 Pandas datetimeindex 一起使用?在对下面的索引进行分组时,我想 return 每个 groupby 对象的日期交集。我知道有 pandas.DatetimeIndex.intersection - 但这似乎最适合仅比较两个日期时间索引。我正在处理的数据可能有零到多行,这些行具有我正在检查日期交集的各种日期范围。
# example data
df = pd.DataFrame([['2020-01-01', '2020-12-31'],
['2020-01-01', '2020-02-29'],
['2020-01-01', '2020-12-31'],
['2020-06-01', '2020-12-31'],
['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 - 代表一月到二月的日期时间索引
B - 代表八月至十月的日期时间索引
在你的情况下,在 date_range
之后使用 Month,然后我们找到 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
是否可以将 groupby 操作与 Pandas datetimeindex 一起使用?在对下面的索引进行分组时,我想 return 每个 groupby 对象的日期交集。我知道有 pandas.DatetimeIndex.intersection - 但这似乎最适合仅比较两个日期时间索引。我正在处理的数据可能有零到多行,这些行具有我正在检查日期交集的各种日期范围。
# example data
df = pd.DataFrame([['2020-01-01', '2020-12-31'],
['2020-01-01', '2020-02-29'],
['2020-01-01', '2020-12-31'],
['2020-06-01', '2020-12-31'],
['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 - 代表一月到二月的日期时间索引
B - 代表八月至十月的日期时间索引
在你的情况下,在 date_range
之后使用 Month,然后我们找到 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