使用sum作为填充方法重新索引Pandas DataFrame

时间:2018-04-13 11:24:09

标签: pandas dataframe

我有两个数据框 - 一个带有每日索引,另一个带有不规则索引。我想将每日采样到不规则,但使用总和作为fill方法。

例如,

df0 = pd.DataFrame(index=pd.date_range(start='2018-03-10', periods=10))
df0['dat'] = 1

# df1 has "missing" days
df1 = df0.iloc[[0,3,4,6,9]]

df0 = df0.reindex(df1, method='sum') # NOT A REAL METHOD

我在df0寻找的结果是:

2018-03-10 1 
2018-03-13 3  # sum of indices 1 and 2 and 3
2018-03-14 1
2018-03-16 2  # sum of 5 and 6
2018-03-19 3  # sum of 7, 8, and 9

1 个答案:

答案 0 :(得分:1)

您需要使用Index.to_series使用sum以及后退和前进填充reindex来为汇总NAN创建群组:

df0 = pd.DataFrame(index=pd.date_range(start='2018-03-10', periods=12))
df0['dat'] = 1

a = df1.index.to_series().reindex(df0.index).bfill().ffill()
print (a)
2018-03-10   2018-03-10
2018-03-11   2018-03-13
2018-03-12   2018-03-13
2018-03-13   2018-03-13
2018-03-14   2018-03-14
2018-03-15   2018-03-16
2018-03-16   2018-03-16
2018-03-17   2018-03-19
2018-03-18   2018-03-19
2018-03-19   2018-03-19
2018-03-20   2018-03-19 #<-replace last NaNs by ffill()
2018-03-21   2018-03-19 #<-replace last NaNs by ffill()
Freq: D, dtype: datetime64[ns]

fin = df0.groupby(a).sum()
print (fin)
            dat
2018-03-10    1
2018-03-13    3
2018-03-14    1
2018-03-16    2
2018-03-19    5