объединение панд DataFrames после повторной выборки - PullRequest
0 голосов
/ 07 июня 2018

У меня есть DataFramewith с индексом datetime.

df1=pd.DataFrame(index=pd.date_range('20100201', periods=24, freq='8h3min'),
                data=np.random.rand(24),columns=['Rubbish'])
df1.index=df1.index.to_datetime()

Я хочу пересчитать этот DataFrame, как в:

df1=df1.resample('7D').agg(np.median)

Затем у меня есть другой DataFrame с индексом другогочастота и запуск с другим смещением часа

df2=pd.DataFrame(index=pd.date_range('20100205', periods=24, freq='6h3min'),
                data=np.random.rand(24),columns=['Rubbish'])
df2.index=df2.index.to_datetime()
df2=df2.resample('7D').agg(np.median)

Операции работают хорошо независимо, но когда я пытаюсь объединить результаты, используя

print(pd.merge(df1,df2,right_index=True,left_index=True,how='outer'))

, я получаю:

Rubbish_x  Rubbish_y
2010-02-01   0.585986        NaN
2010-02-05        NaN   0.423316
2010-02-08   0.767499        NaN

Хотя я хотел бы повторить выборку с одинаковым смещением и получить следующий результат после слияния

            Rubbish_x  Rubbish_y
2010-02-01   AVALUE        AVALUE
2010-02-08   AVALUE        AVALUE

Я пробовал следующее, но он генерирует только nans

df2.reindex(df1.index)

print(pd.merge(df1,df2,right_index=True,left_index=True,how='outer'))

Я должен придерживаться pandas 0.20.1.

Я пытался mergeas_of

df1.index
Out[48]: Index([2015-03-24, 2015-03-31, 2015-04-07, 2015-04-14, 2015-04-21, 2015-04-28], dtype='object')

df2.index
Out[49]: Index([2015-03-24, 2015-03-31, 2015-04-07, 2015-04-14, 2015-04-21, 2015-04-28], dtype='object')
output=pd.merge_asof(df1,df2,left_index=True,right_index=True)

, но он вылетает со следующей трассировкой

Traceback (most recent call last):


TypeError: 'NoneType' object is not callable

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я думаю, что следуйте кодовой базе, чтобы достичь вашей цели

>>> index = pd.date_range('1/1/2000', periods=9, freq='T')
>>> series = pd.Series(range(9), index=index)
>>> series
2000-01-01 00:00:00    0
2000-01-01 00:01:00    1
2000-01-01 00:02:00    2
2000-01-01 00:03:00    3
2000-01-01 00:04:00    4
2000-01-01 00:05:00    5
2000-01-01 00:06:00    6
2000-01-01 00:07:00    7
2000-01-01 00:08:00    8
Freq: T, dtype: int64

>>> series.resample('3T').sum()
2000-01-01 00:00:00     3
2000-01-01 00:03:00    12
2000-01-01 00:06:00    21
Freq: 3T, dtype: int64

https://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.DataFrame.resample.html

0 голосов
/ 07 июня 2018

Мне кажется, нужно merge_asof:

print(pd.merge_asof(df1,df2,right_index=True,left_index=True))
            Rubbish_x  Rubbish_y
2010-02-01   0.446505        NaN
2010-02-08   0.474330   0.606826

Или параметр method='nearest' до reindex:

df2 = df2.reindex(df1.index, method='nearest')
print (df2)
             Rubbish
2010-02-01  0.415248
2010-02-08  0.415248

print(pd.merge(df1,df2,right_index=True,left_index=True,how='outer'))
            Rubbish_x  Rubbish_y
2010-02-01   0.431966   0.415248
2010-02-08   0.279121   0.415248
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...