I have two DataFrames that look like this:
dfH
TICKER Qty PPC Date PxQ PPerc
0 C 6 4185.0 2021-11-13 25110.0 0.097416
1 AAPL 20 3058.0 2021-11-13 61160.0 0.237274
2 JPM 3 5915.0 2021-11-13 17745.0 0.068843
3 KO 15 2481.0 2021-11-13 37215.0 0.144378
4 MSFT 10 5825.6 2021-11-13 58256.0 0.226008
5 PG 5 6280.0 2021-11-13 31400.0 0.121818
6 WMT 5 5375.0 2021-11-13 26875.0 0.104263
dfMerged
Date,C,AAPL,JPM,KO,MSFT,PG,WMT
2020-11-10,2380.000,1759.000,3480.000,1601.000,3189.500,4269.000,3665.000
2020-11-11,2475.000,1798.000,3500.000,1626.000,3286.000,4352.000,3780.000
2020-11-12,2409.000,1765.000,3392.000,1590.000,3208.000,4305.000,3687.000
2020-11-13,2425.000,1770.000,3400.000,1590.000,3245.000,4322.500,3780.000
2020-11-16,2472.000,1792.000,3460.000,1600.000,3215.000,4240.000,3805.000
2020-11-17,2535.000,1810.000,3489.000,1610.000,3220.000,4300.000,3793.000
Like Vlookup in excel I'm trying to pick PPerc value from dfH and multiply it with the correspondent column in dfMerged, acummulate row values and append it in dfMerged as a new column. With the expression below I manage to do the math but I'm having troubles to accumulate this iteration on dfMerged["Ind"], I'm just getting last iteration values.
for i in list(dfMerged.columns):
if i != 'Date':
index = (dfH[dfH["TICKER"]==i]["PPerc"].values[0] * dfMerged[i])
dfMerged["Ind"] = index
Date C AAPL JPM ... MSFT PG WMT Ind
0 2020-11-10 2380.0 1759.0 3480.0 ... 3189.5 4269.0 3665.0 382.124817
1 2020-11-11 2475.0 1798.0 3500.0 ... 3286.0 4352.0 3780.0 394.115091
2 2020-11-12 2409.0 1765.0 3392.0 ... 3208.0 4305.0 3687.0 384.418609
3 2020-11-13 2425.0 1770.0 3400.0 ... 3245.0 4322.5 3780.0 394.115091
4 2020-11-16 2472.0 1792.0 3460.0 ... 3215.0 4240.0 3805.0 396.721672
CodePudding user response:
If I you understand correctly, this works:
new_col = sum([df2[symbol] * df1['PPerc'][i] for i, symbol in enumerate(df1['TICKER'])])
Output:
>>> new_col
0 76190.0
1 77730.0
2 75660.0
3 75950.0
4 77240.0
5 78340.0
dtype: float64
CodePudding user response:
Solved using Join and then sum
for i in list(dfMerged.columns): if i != 'Date': index = (dfH[dfH["TICKER"]==i]["PPerc"].values[0] * dfMerged[i]) tmp = tmp.join(index,how="right") tmp["index"]=tmp.sum(axis=1) dfMerged["Ind"] = tmp['index']
— @Billy101
