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()