【问题标题】:pandas fill missing row with dates and value from previous data熊猫用以前数据中的日期和值填充缺失的行
【发布时间】:2020-12-09 15:12:18
【问题描述】:

假设我有以下数据。

dates=['2020-12-01','2020-12-04','2020-12-05', '2020-12-01','2020-12-04','2020-12-05']
symbols=['ABC','ABC','ABC','DEF','DEF','DEF']
v=[1,3,5,7,9,10]
df= pd.DataFrame({'date':dates, 'g':symbols, 'v':v})
         date    g   v
0  2020-12-01  ABC   1
1  2020-12-04  ABC   3
2  2020-12-05  ABC   5
3  2020-12-01  DEF   7
4  2020-12-04  DEF   9
5  2020-12-05  DEF  10

我想用以前的值填充缺失的日期(按字段“g”分组) 例如,我想在上面的示例中添加以下主菜:

2020-12-02 ABC 1
2020-12-03 ABC 1
2020-12-02 DEF 7
2020-12-03 DEF 7

我该怎么做?

【问题讨论】:

    标签: python pandas date


    【解决方案1】:

    答案主要是从下面的答案中借来的,除了用负值填充并用它替换为空值进行前向填充。

    Original Answer Here

    dates=['2020-12-01','2020-12-04','2020-12-05', '2020-12-01','2020-12-04','2020-12-05']
    symbols=['ABC','ABC','ABC','DEF','DEF','DEF']
    v=[1,3,5,7,9,10]
    df= pd.DataFrame({'date':dates, 'g':symbols, 'v':v})
    
    df['date'] = pd.to_datetime(df['date'])
    
    df = df.set_index(
        ['date', 'g']
    ).unstack(
        fill_value=-999
    ).asfreq(
        'D', fill_value=-999
    ).stack().sort_index(level=1).reset_index()
    
    df.replace(-999, np.nan).ffill()
    

    【讨论】:

    • 太棒了。谢谢~!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2017-12-12
    相关资源
    最近更新 更多