Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据条件在多索引数据框中添加缺少的日期行_Python_Pandas_Multi Index - Fatal编程技术网

Python 如何根据条件在多索引数据框中添加缺少的日期行

Python 如何根据条件在多索引数据框中添加缺少的日期行,python,pandas,multi-index,Python,Pandas,Multi Index,我有大约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

我有大约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_描述和生效日期是一个多指标

我有一个额外的数据集,我正在与上面的数据集合并。它们将被列ndc_description和effective_date合并(显示的其他列仅用于演示数据集中存在其他各种类型的数据)

当前问题:每个数据集中的日期不匹配。在上面的数据集中,它们(大部分)是以每周为基础的,但这不能保证。在另一个数据集中,也没有保证规律性。因此,我想我需要在上面“生效日期”列中列出的日期之间添加所有日期的行,这样我就可以合并ndc_说明和生效日期这是执行此过程的最佳方式吗?由于涉及的数据量很大,我希望在最终运行所有数据之前对涉及的代码进行优化

潜在解决方案:我已经看到了。重采样()在这里可能很有价值,但我还没能让它发挥作用。类似这样的内容:
Cleaned\u Price\u Data.effective\u date.resample('1D',fill\u method='ffill',level=1)

我认为将最大和最小日期包含在上面的某个位置也会提高效率,这样就不会超出必要的范围。另外,在ndc_描述中包含该值,以便添加到生效日期列的日期不会对每个相同的ndc_描述值重复

编辑: 下面的一些代码说明了我的数据帧的当前状态,以及转换完成后它应该如何处理。 我正在尝试转换如下数据帧:

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
对于这样一个(注意,添加了日期):

编辑2:我想出了以下代码(通过Parfait的回答),似乎可以做到这一点:

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万行中,该文件相当臃肿,我将尝试将其与另一个数据集合并。任何试图优化此功能(或建议更有效的替代方案)的尝试都将不胜感激。

您能创建吗?还添加了
附加数据集的样本
和预期输出?@jezrael-添加了可复制的代码,说明了我的数据帧的当前状态,以及我希望它如何结束。这个问题本身是无法验证的,因为它更多的是“我该怎么做”的脉络,而不是“我得到了这个错误,我该怎么做”的本质。
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()