我大约有750万行数据,格式如下:
ndc_description effective_date ...
12-HR DECONGEST 120MG CAPLET 2015-08-19 2015-08-26 G NaN NaN 1 0.36062 36800005452 Y C/I EA
2015-07-22 2015-08-12 G NaN NaN 1 0.37681 36800005452 Y C/I EA
2015-06-17 2015-07-15 G NaN NaN 1 0.36651 36800005452 Y C/I EA
Some Other drug 2016-11-21 2015-08-26 G NaN NaN 1 0.36062 36800005452 Y C/I EA
2016-07-23 2015-08-12 G NaN NaN 1 0.37681 36800005452 Y C/I EA
2016-05-17 2015-07-15 G NaN NaN 1 0.36651 36800005452 Y C/I EA
ndc_description和有效日期为多索引。
我还有一个其他数据集,正在与上面合并。它们将被ndc_description列和Effective_date列合并(显示的其他列纯粹是为了演示数据集中是否存在其他类型的数据)。
当前问题:每个数据集中的日期都不匹配。在上面的数据集中,它们(大部分)是每周一次,但这不能保证。在其他数据集中,也没有保证的规律性。因此,我想我需要为上面的valid_date列中列出的日期之间的所有日期添加行,以便随后可以对ndc_description和Effective_date进行合并。 这是执行此过程的最佳方法吗?由于涉及的数据量大,我想在最终运行所有数据之前优化所涉及的代码。
潜在的解决方案::我已经看到.resample()在这里可能很有价值,但是我还无法使其工作。像这样的东西:Cleaned_Price_Data.effective_date.resample('1D', fill_method = 'ffill', level = 1)
我认为将max&min日期包括在上面的某处也将提高效率,这样就不会ffill
超出必要范围。另外,将值包括在ndc_description中,这样就不会为每个相同的ndc_description值重复添加到有效日期列的日期。
编辑: 这是一些代码,说明了数据框的当前状态以及转换完成后的外观。 我正在尝试转换这样的数据框:
idx = pd.MultiIndex.from_product([['drug_a', 'drug_b', 'drug_c'],
['2015-08-19', '2015-08-17', '2015-08-14']],
names=['drug_name', 'effective_date'])
col = ['other_data_1', 'other_data_2', 'other_data_3']
pre_transform = pd.DataFrame('-', idx, col)
pre_transform
对于这样的人(请注意添加日期):
idx = pd.MultiIndex.from_product([['drug_a', 'drug_b', 'drug_c'],
['2015-08-19', '2015-08-18', '2015-08-17', '2015-08-16', '2015-08-15', '2015-08-14']],
names=['drug_name', 'effective_date'])
col = ['other_data_1', 'other_data_2', 'other_data_3']
post_change = pd.DataFrame('-', idx, col)
post_change
编辑2:我想出了以下代码(通过Parfait的答案here),似乎可以解决问题:
def expand_dates(ser):
return pd.DataFrame({'effective_date': pd.date_range(ser['effective_date'].min(), ser['effective_date'].max(), freq='D')})
price_cols = list(Cleaned_Price_Data.columns)
all_effective_dates = Cleaned_Price_Data.groupby(['ndc']).apply(expand_dates).reset_index().merge(Cleaned_Price_Data, how = 'left')[price_cols].ffill()
但是,在5500万行的文件中,文件非常膨胀,我将尝试将其与另一个数据集合并。任何对此进行优化(或建议使用更有效的替代方法)的尝试将不胜感激。