2015-02-07 1 views
2

У меня есть dataframe df1, где индекс - это DatetimeIndex, и есть 5 столбцов, col1, col2, col3, col4, col5.dataframe умножить некоторые столбцы с рядом

У меня есть еще один df2, который имеет почти равный datetimeindex (некоторые дни df1 могут отсутствовать в df1) и один столбец «Значение».

Я хотел бы умножить df1 на место по значению из df2, когда даты совпадают. Но не для всех столбцов col1 ... col5, только col1 ... col4

Я вижу, что можно умножить значение col1 *, а затем col2 * Значение и т. Д. ... и составить новый dataframe для замените df1.

Есть ли более эффективный способ?

ответ

3

Вам достичь этого путь переиндексации второй dataframe поэтому они та же форма, а затем с помощью оператора dataframe mul:

Создать два кадра данных с серией даты и времени. Второй, который использует только рабочие дни, чтобы убедиться, что у нас есть промежутки между ними. Установите даты как индексы.

import pandas as pd 
# first frame 
rng1 = pd.date_range('1/1/2011', periods=90, freq='D') 
df1 = pd.DataFrame({'value':range(1,91),'date':rng1}) 
df1.set_index('date', inplace =True) 

# second frame with a business day date index 
rng2 = pd.date_range('1/1/2011', periods=90, freq='B') 
df2 = pd.DataFrame({'date':rng2}) 
df2['value_to_multiply'] = range(1-91) 
df2.set_index('date', inplace =True) 

reindex второй кадр с индексом с первого. Теперь у Df1 будут пробелы для нерабочих дней, заполненных первым предыдущим действительным наблюдением.

# reindex the second dataframe to match the first 
df2 =df2.reindex(index= df1.index, method = 'ffill') 

Multiple df2 по df1 [ 'value_to_multiply_by']:

# multiple filling nans with 1 to avoid propagating nans 
# nans can still exists if there are no valid previous observations such as at the beginning of a dataframe 
df1.mul(df2['value_to_multiply_by'].fillna(1), axis=0) 
+0

обновляется, чтобы сделать его легче понять – JAB

+0

Это очень близко к тому, что мне нужно 2 вещи, за исключением: 1. Данные I в df1 не является константой, и мне нужно заполнить NA значением, каждое из предыдущего. 2. Есть ли способ сделать мул на месте? – MMM

+0

reindex имеет параметр, называемый 'method', который может использоваться для заполнения пробелов в новом индексе. '' ffill'' принимает последнее действительное наблюдение и '' bfill'' следующее достоверное наблюдение. Обновлен код для его включения. Данные не обязательно должны быть постоянными - это был просто пример. – JAB

Смежные вопросы