我有两个数据帧如下所示:
A B
date
2017-10-5 2 3
2017-10-6 5 5
2017-11-5 7 8
2017-11-6 11 13
W1 W2
date
2017-09-30 -0.2 0.01
2017-10-31 -0.003 0.04我想创建一个新的数据框架,其中包含以下内容:
W1 * A W2 * B
date
2017-10-5 -0.2 * 2 0.01 * 3
2017-10-6 -0.2 * 5 0.01 * 5
2017-11-5 -0.003 * 7 0.04 * 8
2017-11-6 -0.003 * 11 0.04 * 13发布于 2018-10-31 22:04:29
在np.repeat上使用df2和乘法。看上去指数在这里不起任何作用。
df1 = df1.mul(np.repeat(df2.values, 2, axis=0))或者,更广泛地说,
df1 = df1.mul(np.repeat(df2.values, len(df1) // len(df2), axis=0))
print(df1)
A B
date
2017-10-5 -0.400 0.03
2017-10-6 -1.000 0.05
2017-11-5 -0.021 0.32
2017-11-6 -0.033 0.52其中len(df1) // len(df2)计算它们大小的比率。
发布于 2018-10-31 22:28:28
如果索引确实意味着什么,即您有一个值在某个日期发生了更改,并且您希望继续使用它,直到它下次更改为止。然后,您可以使用reindex命令和参数method='ffill'创建一个与原始数据create对齐的数据。下面是它的样子:
import pandas as pd
import dateutil
df = pd.DataFrame([['2017-10-5',2,3],
['2017-10-6',5,5],
['2017-11-5',7,8],
['2017-11-6',11,13]],
columns = ['date','A','B'])
df['date'] = df['date'].apply(dateutil.parser.parse)
df = df.set_index('date')
wdf = pd.DataFrame([['2017-09-30',-0.2,0.01],
['2017-10-31',-0.03,0.04]],
columns=['date','W1','W2'])
wdf['date'] = wdf['date'].apply(dateutil.parser.parse)
wdf = wdf.set_index('date')
wdf_r = wdf.reindex(df.index,
method='ffill')
res = df.drop(['A','B'],axis=1).assign(W1_x_A = wdf_r.W1 * df.A,
W2_x_B = wdf_r.W2 * df.B)
print(res)哪种输出
W1_x_A W2_x_B
date
2017-10-05 -0.40 0.03
2017-10-06 -1.00 0.05
2017-11-05 -0.21 0.32
2017-11-06 -0.33 0.52https://stackoverflow.com/questions/53092565
复制相似问题