2014-12-30 3 views
1

Это кажется, что это должно быть простым, но я не могу понять, как умножать каждый столбец панд dataframe его соответствующим значением в серии:Умножительная временная серия данных по серии?

rng = pd.date_range('1/1/2011', periods=72, freq='H') 
ts1 = pd.Series(np.random.randn(len(rng)), index=rng) 
ts2 = pd.Series(np.random.randn(len(rng)), index=rng) 
df=pd.DataFrame({"ts1":ts1, "ts2":ts2}) 
s3=pd.Series([3,4]) 
df.mul(s3, axis=0) # Gives 2 columns of NaNs 
df.mul(s3, axis=1) # Gives 4 columns of NaNs 

цель здесь просто иметь все значения ts1 в фрейме данных, умноженном на 3, и все значения ts2 в фрейме данных, умноженном на 4. mul, кажется, работают нормально, если df составлен из временных рядов Series.

+0

Хотя я использую панды много сейчас, кто говорит он готов заменить Matlab для работы с таймингами, просто нужно попытаться это сделать. ARRRGGGG. – Marc

ответ

0

Чтобы умножить две серии, они должны иметь одинаковый индекс (длина и значение). Вы можете сделать умножение, как это так,

s3 = pd.Series([3]*len(df.index), index = df.index) 
s4 = pd.Series([4]*len(df.index), index = df.index) 
df1 = df.ts1 * s3 
df2 = df.ts2 * s4 
+0

Итак, я должен индивидуально размножать каждую серию в dataframe, а затем повторно объединять их в новый фреймворк данных? –

0

Через несколько часов возиться с ним, я получил эту работу:

df.apply(lambda row: list(r * m for r, m in zip(row, s3)), axis=1) 
Смежные вопросы