[英]Multiply each row of one dataframe by all rows of column in second dataframe
[英]How to multiply each row in dataframe by a different column of different dataframe and get sum of all rows as a new column in Python?
我试图将 dataframe 的每一行乘以另一个 dataframe 中一列的值,
例如,如果我有以下 dataframe:
df = pd.DataFrame({
'FR': [4.0405, 4.0963, 4.3149],
'GR': [1.7246, 1.7482, 1.8519],
'IT': [804.74, 810.01, 860.13],
'F': [8.4, 10.01, 60.3]},
index=['1980-01-01', '1980-02-01', '1980-03-01'])
df_ret = df.pct_change()
df2 = pd.DataFrame({'symbol':['FR','GR','IT','F'],
'weight' : [0.2,0.3,0.1,0.4]})
我想将 df_ret 中每一行的每个元素乘以 df2['weight']
然后找到每行的总和并填充到一个新列中作为 df['port']
我努力了:
df_ret.mul(df2.weight)
但我得到了一个更大的 dataframe,所有值为 NaN
任何帮助表示赞赏,谢谢。
我们可以通过将df2
的索引 ( set_index
) 设置为symbol
并将df_ret
乘以新索引的df2['weight']
使系列索引与df_ret
列对齐来利用索引 alignment。 然后我们可以用DataFrame.sum
对行 ( axis=1
) 求和:
df_ret = df_ret.mul(df2.set_index('symbol')['weight'])
df_ret['Port'] = df_ret.sum(axis=1)
df_ret
:
FR GR IT F Port
1980-01-01 NaN NaN NaN NaN 0.000000
1980-02-01 0.002762 0.004105 0.000655 0.076667 0.084189
1980-03-01 0.010673 0.017795 0.006188 2.009590 2.044246
如果我们想在第一行中使用NaN
而不是 0,我们也可以设置skipna=False
:
df_ret['Port'] = df_ret.sum(axis=1, skipna=False)
FR GR IT F Port
1980-01-01 NaN NaN NaN NaN NaN
1980-02-01 0.002762 0.004105 0.000655 0.076667 0.084189
1980-03-01 0.010673 0.017795 0.006188 2.009590 2.044246
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.