Условное заполнение фрейма данных на основе другого фрейма данных

1

У меня есть два кадра данных. Первый dataframe df содержит 5-минутные (возвратные) данные и час и минуту индекса

import pandas as pd
dates = pd.date_range(start='2018-01-01', end='2018-01-05', freq='5T')
df = pd.DataFrame(np.random.randn(len(dates),1), index=dates, columns=list(['Ret']))
df['Hour'] = df.index.hour
df['Minute'] = df.index.minute
tmp = df['Ret'].groupby([df['Hour'],df['Minute']]).mean().to_frame()

Итак, теперь tmp содержит мультииндексированный фрейм данных, он имеет два уровня часов и минут. Теперь я хочу создать новый столбец в df где я выберу правильные значения из dataframe tmp и верну их обратно в фреймворк данных df.

Поэтому в основном я хочу создать новый столбец в df, выполнив поиск df['Hour'] и df['Minute'] в tmp и вернув правильное значение, но я не могу заставить его работать.

Теги:
pandas
dataframe

1 ответ

1
Лучший ответ

Используйте merge, но будьте осторожны с синтаксисом:

result = df.merge(tmp, left_on=['Hour', 'Minute'], right_index=True, how='left')

result.head()
               Ret_x  Hour  Minute     Ret_y
2018-01-01 -0.751599     0       0 -0.035756
2018-01-02 -0.650874     0       0 -0.035756
2018-01-03 -1.110701     0       0 -0.035756
2018-01-04  0.944097     0       0 -0.035756
2018-01-05  1.390296     0       0 -0.035756
  • 0
    Это потрясающе, отлично работает. Не могли бы вы объяснить мне синтаксис? Я читаю документацию, но я все еще чувствую, что я не df.merge()
  • 0
    @Rainymood Конечно. left_on указывает столбцы из левой части dataFrame, а right_index указывает, что объединение для правой части dataFrame является индексом. Вот и все.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню