dataframe将一些列与一系列相乘

时间:2015-02-07 16:31:19

标签: pandas

我有一个数据帧df1,其中索引是一个DatetimeIndex,有5列,col1,col2,col3,col4,col5。

我有另一个df2,它具有几乎相等的datetimeindex(df1中可能缺少某些df1天)和一个'Value'列。

当日期相同时,我想将df2中的值乘以df2的值。但不是所有列col1 ... col5,只有col1 ... col4

我可以看到可以将col1 * Value,col2 * Value等等相乘......并组成一个新的数据帧来替换df1。

有更有效的方法吗?

1 个答案:

答案 0 :(得分:3)

您可以通过重新索引第二个数据框使它们具有相同的形状,然后使用数据框运算符mul来实现此目的:

使用datetime系列创建两个数据框。第二个仅使用工作日来确保两者之间存在差距。将日期设置为索引。

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)

使用第一帧的索引重新索引第二帧。 Df1现在将填补上一次有效观察的非工作日间隙。

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

df1的多个df2 [' 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)