1 回答

TA贡献1794条经验 获得超7个赞
首先将shifted DataFrame 与进行比较DataFrame.eq,然后使用numpy.select2 个布尔掩码设置值,调用DataFrame构造函数并最后join到原始值:
m = df.eq(df.shift(-1, axis=1))
arr = np.select([df ==0, m], [np.nan, df], df*100)
#python 3.6+ for rename columns
df2 = pd.DataFrame(arr, index=df.index).rename(columns=lambda x: f'comp{x+1}')
#python bellow
#df2 = pd.DataFrame(arr, index=df.index).rename(columns=lambda x: 'comp{}'.format(x+1))
df3 = df.join(df2).reset_index()
print (df3)
rule_id reqid1 reqid2 reqid3 reqid4 comp1 comp2 comp3 comp4
0 53139 0 0 1 0 NaN NaN 100.0 NaN
1 51181 1 1 1 0 1.0 1.0 100.0 NaN
2 50412 0 1 1 0 NaN 1.0 100.0 NaN
3 50356 0 0 1 0 NaN NaN 100.0 NaN
4 50239 0 1 0 1 NaN 100.0 NaN 100.0
5 50238 1 1 1 0 1.0 1.0 100.0 NaN
6 50014 1 0 1 1 100.0 NaN 1.0 100.0
添加回答
举报