I have a dataframe with specific headers and a dictionary with matching headers. I wish to simply multiply the value of the given matching key with that matching column in pandas. Here is the pandas DF
ID 208230_s_at norm 242009_at norm 211535_s_at norm ... AffyVisit Gender(M/F) DxCode dx
0 phchp083v4 0.005718 6.641902e-04 0.008335 ... phchp083v4 M SZ M-SZ
1 phchp090v1 0.032542 4.315564e-04 0.011494 ... phchp090v1 M SZ M-SZ
2 phchp090v2 0.021074 6.180979e-04 0.006773 ... phchp090v2 M SZ M-SZ
3 phchp090v3 0.015779 4.156884e-04 0.009435 ... phchp090v3 M SZ M-SZ
4 phchp133v2 0.016416 2.205289e-27 0.005122 ... phchp133v2 M SZ M-SZ
5 phchp308v5 0.002679 2.964330e-04 0.006225 ... phchp308v5 M SZ M-SZ
6 phchp366v2 0.009805 8.229048e-04 0.014914 ... phchp366v2 M SZ M-SZ
7 phchp375v1 0.023069 2.961317e-04 0.010417 ... phchp375v1 M SZ M-SZ
8 phchp375v2 0.020838 3.398511e-04 0.010711 ... phchp375v2 M SZ M-SZ
and here is my dictionary with headers that match the above DF with a given value:
{'208230_s_at norm': 2.3012184212079356, '242009_at norm': 14.965237539220922, '211535_s_at norm': 5.499552595639465, '204183_s_at norm': 3.0375335449229115, '224818_at norm': 3.4170449181626052, '201668_x_at norm': 0.4067131613648669, '206385_s_at norm': 4.737388624118393, '210924_at norm': 1632.4015971405947}
I just wish to multiply column 208230_s_at norm with the same dictionary key, by that keys value. Thank you.
CodePudding user response:
dict.items()
can get you a list of the keys and the values from a dictionary. Try this:
for key, value in dict.items():
df[key] = df[key] * value
CodePudding user response:
You can simply do
# d is the dictionary
df[list(d)] *= d
or more explicitly
df[list(d.keys())] *= d
CodePudding user response:
Found an easy solution:
maleSZdict = pd.Series(finalMaleSZ.OS_Factor_SZMale.values,index=finalMaleSZ.Probeset).to_dict()
SZ_to_update = list(maleSZdict.keys())
rnaMaleSZcopy[SZ_to_update] = rnaMaleSZcopy[SZ_to_update].mul(pd.Series(maleSZdict), axis=1)[SZ_to_update]