Вам нужно выяснить свою логику.Из того, что вы написали, это может охватывать первые два дополнительных столбца с использованием панд для вашего кадра данных.
import pandas as pd
# data
d = {'rule_id': [53139,51181,50412,50356,50239,50238,50014], 'reqid1':[0,1,0,0,0,1,1], 'reqid2':[0,1,1,0,1,1,0], 'reqid3':[1,0,1,1,0,0,1]}
df = pd.DataFrame(data=d)
# reorder columns
cols = df.columns.tolist()
cols = cols[-1:]+cols[:-1]
df = df[cols]
dataframe:
rule_id reqid1 reqid2 reqid3
0 53139 0 0 1
1 51181 1 1 0
2 50412 0 1 1
3 50356 0 0 1
4 50239 0 1 0
5 50238 1 1 0
6 50014 1 0 1
затем логика для новых столбцов:
c1 = list(map(lambda a,b: a if a==b else 100*a, df.reqid1, df.reqid2 ))
df['comp1']=c1
c2 = list(map(lambda b,c,c1: b if b==c else (b if b < c else 100/(b+c1)), df.reqid2, df.reqid3, df.comp1 ))
df['comp2']=c2
# convert your zeros to Nans with numpy:
import numpy as np
comps = ['comp1', 'comp2']
df[comps] = df[comps].replace({0:np.nan})
вывод:
rule_id reqid1 reqid2 reqid3 comp1 comp2
0 53139 0 0 1 NaN NaN
1 51181 1 1 0 1.0 50.0
2 50412 0 1 1 NaN 1.0
3 50356 0 0 1 NaN NaN
4 50239 0 1 0 NaN 100.0
5 50238 1 1 0 1.0 50.0
6 50014 1 0 1 100.0 NaN