Python 熊猫:DataFrame.fillna,但仅来自同一天
假设我有一个稀疏的Python 熊猫:DataFrame.fillna,但仅来自同一天,python,pandas,Python,Pandas,假设我有一个稀疏的数据帧,我想.fillna(method='ffill'),但只在具有相同日期的行上 例如,如果df有行: 2017-01-01 12:00 0.6 2017-01-01 13:00 NaN 2017-01-02 12:00 NaN 2017-01-02 13:00 0.8 然后我想填写以下表格: 2017-01-01 12:00 0.6 2017-01-01 13:00 0.6 2017-01-02 12:00 NaN 2017-01-02 13
数据帧
,我想.fillna(method='ffill')
,但只在具有相同日期的行上
例如,如果df
有行:
2017-01-01 12:00 0.6
2017-01-01 13:00 NaN
2017-01-02 12:00 NaN
2017-01-02 13:00 0.8
然后我想填写以下表格:
2017-01-01 12:00 0.6
2017-01-01 13:00 0.6
2017-01-02 12:00 NaN
2017-01-02 13:00 0.8
下面是一些代码,用于创建一个稀疏的每小时数据帧进行演示:
df = pd.DataFrame(np.random.rand(76), columns=list('X'), index=pd.date_range('2016-01-01', freq='H', periods=76))
df.loc[df['X'] < 0.6, 'X'] = np.nan
df=pd.DataFrame(np.random.rand(76),columns=list('X'),index=pd.date\u range('2016-01-01',freq='H',periods=76))
df.loc[df['X']<0.6,'X']=np.nan
在当天执行分组,然后拨打ffill
:
df = df.groupby(pd.TimeGrouper(freq='D')).ffill()
你知道为什么重采样('D')。ffill()
失败了吗?@ayhan:你是说重采样('H')
?resample('D')
downsample将每小时的数据减少到每天,这样它就不会真正匹配了?从几个测试中,我认为resample('H')
只有在完全缺少小时数的情况下才能进行正向填充。在这种情况下,所有的时间都在那里,有些恰好是空的。我想你需要先去掉空值,它才能工作,比如df['X']=df['X'].dropna().resample('H').ffill()
。我想ffill
会让它像groupby.transform
一样工作,但你是对的。谢谢。为了避免在以后的Pandas版本>=0.24.0中出现警告,TimeGrouper重命名为Grouper:df=df.groupby(pd.Grouper(freq='D'))).ffill()