大熊猫相当新,所以我正在努力解决这个问题。
我有一个更大的DataFrame,其记录由包含DatetimeIndex的MultiIndex索引,以及一个较小的DataFrame索引,包含开始日期和结束日期,两者都是DatetimeIndex。这是他们的样子:
更大的DataFrame:
Data
PatId EntryDate Id
725 2005-01-03 1422 X
2005-01-04 1563 X
2005-01-05 1355 X
2005-01-06 118 X
2005-01-09 1400 X
包含日期范围的小一个:
PatId
EntryDate ExitDate
2005-01-15 2005-04-15 22407
2005-01-30 2005-04-30 95938
2005-02-07 2005-05-07 116812
2005-02-18 2005-05-18 12163
2005-02-21 2005-05-21 22908
我想要一种优雅而有效的方法来过滤较大的DataFrame,只包含那些属于较小DataFrame中定义的日期范围的记录。
答案 0 :(得分:1)
你可以这样做一个简单的过程:
pd.concat([df.loc[:, start:end] for start, end in zip(df2.EntryDate, df2.ExitDate)])
<强>解释强>
答案 1 :(得分:1)
您可以使用:
EntryDate = df2.index.get_level_values('EntryDate')
ExitDate = df2.index.get_level_values('ExitDate')
idx = np.concatenate([pd.date_range(s, e) for s, e in zip(EntryDate, ExitDate)])
df = df1[df1.index.get_level_values('EntryDate').isin(np.unique(idx))]
<强>解释强>:
get_level_values
MultiIndex
的值
date_range
并加入isin
过滤boolean indexing
只有unique
日期