簡體   English   中英

如何將 dataframe 中的每一行乘以不同 dataframe 的不同列,並將所有行的總和作為 Python 中的新列?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM