根据条件在熊猫数据框行之间填充多行

时间:2019-09-18 21:32:50

标签: python pandas merge timestamp fillna

我有一个如下的数据集:

pd.DataFrame({'Date':['2019-01-01','2019-01-03','2019-01-01','2019-01-04','2019-01-01','2019-01-03'],'Name':['A','A','B','B','C','C'],'Open Price':[100,200,300,400,500,600],'Close Price':[200,300,400,500,600,700]})

现在我们可以看到该表中缺少几天的条目。即A的2019-01-02,B的2019-01-02、2019-01-03和C的2019-01-02。

我想要做的是在这些日期的数据框中添加虚拟行,

和收盘价列与下一天的下一个开盘价条目相同。而且我不在乎开盘价,它可以是nan或0

预期产量

pd.DataFrame({'Date':['2019-01-01','2019-01-02','2019-01-03','2019-01-01','2019-01-02','2019-01-03','2019-01-04','2019-01-01','2019-01-02','2019-01-03'],'Name':['A','A','A','B','B','B','B','C','C','C'],'Open Price':[50,'nan',150,250,'nan','nan',350,450,'nan',550],'Close Price':[200,150,300,400,350,350,500,600,550,700]})

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您对应该如何内插价格的逻辑很模糊,但是要开始使用,请考虑一下,记住将日期转换为datetime dtype:

df['Date'] = pd.to_datetime(df['Date'])
df = (df.groupby('Name')
        .resample('D', on='Date')
        .mean()
        .swaplevel()
        .interpolate()
)

print(df)
                 Open Price  Close Price
Date       Name                         
2019-01-01 A     100.000000   200.000000
2019-01-02 A     150.000000   250.000000   
2019-01-03 A     200.000000   300.000000
2019-01-01 B     300.000000   400.000000
2019-01-02 B     333.333333   433.333333
2019-01-03 B     366.666667   466.666667
2019-01-04 B     400.000000   500.000000  
2019-01-01 C     500.000000   600.000000
2019-01-02 C     550.000000   650.000000
2019-01-03 C     600.000000   700.000000