With the following toy dataframe:
import pandas as pd
df = pd.DataFrame(
{
"PRO_CHARGE": [(0.0, 99283.0), (1.0, 99283.0), (1.0, 99284.0)],
"TOTAL": [15, 30, 23],
"PERC_99282": [0.115, 0.49, 0.53],
}
)
print(df)
# Output
PRO_CHARGE TOTAL PERC_99282
0 (0.0, 99283.0) 15 0.115
1 (1.0, 99283.0) 30 0.490
2 (1.0, 99284.0) 23 0.530
Here is one way to it with Pandas .at property, which provides fast setting (as opposed to .loc) for a single value:
df.at[df["PRO_CHARGE"] == (1.0, 99283.0), "%"] = (
df.loc[df["PRO_CHARGE"] == (1.0, 99283.0), "TOTAL"].values[0]
* df.loc[df["PRO_CHARGE"] == (0.0, 99283.0), "PERC_99282"].values[0]
)
Then:
print(df)
# Output
PRO_CHARGE TOTAL PERC_99282 %
0 (0.0, 99283.0) 15 0.115 NaN
1 (1.0, 99283.0) 30 0.490 3.45
2 (1.0, 99284.0) 23 0.530 NaN