目标:在熊猫中使用类似的SUMPRODUCT方法创建输出
说明:我需要使用两个数据帧(df和df_2_copy)。在将各自的价格乘以df(2000,3000,5000)的价格后,我试图添加1个月CD,3个月CD,6个月CD。
import pandas as pd
data = [['1-mo CDs', 1.0, 1,2000, '1, 2, 3, 4, 5, and 6'],
['3-mo CDs', 4.0 ,3 ,3000,'1 and 4'],
['6-mo CDs',9.0 ,6, 5000,'1']]
df = pd.DataFrame(data,columns=['Scenario','Yield', 'Term','Price', 'Purchase CDs in months'])
df
data_2 = [['Init Cash', 400000, 325000,335000,355000,275000,225000,240000],
['Matur CDs',0,0,0,0,0,0,0],
['Interest',0,0,0,0,0,0,0],
['1-mo CDs',0,0,0,0,0,0,0],
['3-mo CDs',0,0,0,0,0,0,0],
['6-mo CDs',0,0,0,0,0,0,0],
['Cash Uses',75000,-10000,-20000,80000,50000,-15000,60000],
['End Cash', 0,0,0,0,0,0,0]]
# set table
df_2 = pd.DataFrame(data_2,columns=['Month', 'Month 1', 'Month 2', 'Month 3', 'Month 4', 'Month 5', 'Month 6', 'End'])
df_2_copy = df_2.copy()
最终,我想将SUMPRODUCT的输出放置在df_2_copy.iloc[7]
位置。
任何帮助将不胜感激。
答案 0 :(得分:1)
您可以通过以下方式进行操作:
在特定的月份内,用 Month 生成df3
-值df_2
对于df
中具有核心对应行的行,该列已更改为索引:
df3 = df_2.drop(columns='End').set_index('Month')\
.query('index in @df.Scenario')
对于我的测试数据,更改了 Month n 个值,它是:
Month 1 Month 2 Month 3 Month 4 Month 5 Month 6
Month
1-mo CDs 1 2 0 2 2 0
3-mo CDs 1 0 3 0 4 0
6-mo CDs 1 1 0 2 0 0
然后使用场景更改为索引,生成df4
-df
,
仅限 Price 列,但仍作为DataFrame:
df4 = df.set_index('Scenario').Price.to_frame()
结果是:
Price
Scenario
1-mo CDs 2000
3-mo CDs 3000
6-mo CDs 5000
然后计算求和:
sums = (df3.values * df4.values).sum(axis=0)
结果是:
[10000 9000 9000 14000 16000 0]
最后一步是将这些数字写入目标位置:
df_2.iloc[7, 1:7] = sums