[英]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.