У меня есть два фрейма данных - один с ежедневным индексом, а другой с нерегулярным индексом. Я хотел бы брать ежедневные и нерегулярные выборки, но используйте сумму в качестве метода 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
2
mankoff 13 Апр 2018 в 14:24

1 ответ

Лучший ответ

Вам необходимо создать группы для агрегирования sum с помощью Index.to_series с 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
2
jezrael 13 Апр 2018 в 11:47