1 回答
TA贡献1876条经验 获得超7个赞
对所有列使用数据帧过滤器
,按数据帧检查
列的顺序并切片,最后使用数据帧.idxmax
:
df['Top Scope'] = df.filter(like='Scope').idxmax(axis=1)
#seelcting all columns without first with reversed order
#df['Top Scope'] = df.iloc[:, :0:-1].idxmax(axis=1)
print (df)
ID Scope 1 Scope 2 Scope 3 Scope 4 Scope 30 Top Scope
0 1 True True True False True Scope 30
1 2 True True True False False Scope 3
2 3 True True True False True Scope 30
3 4 True False False False False Scope 1
更通用的解决方案是必要的,以避免错误的输出,如果所有值与numpy.where和DataFrame.any测试至少每行一个:FalseTrue
df1 = df.filter(like='Scope').iloc[:, ::-1]
df['Top Scope'] = np.where(df1.any(axis=1), df1.idxmax(axis=1), 'no match')
print (df)
ID Scope 1 Scope 2 Scope 3 Scope 4 Scope 30 Top Scope
0 1 True True True False True Scope 30
1 2 True True True False False Scope 3
2 3 True True True False True Scope 30
3 4 True False False False False Scope 1
4 5 False False False False False no match
添加回答
举报