如何在每行和为1的两类概率列中寻找满足条件的列号
我来帮你搞定这个问题!既然你的两列数据每行数值之和为1,那其实每行最多只有一列能满足≥0.6的条件(毕竟如果一列≥0.6,另一列最多是0.4),处理起来逻辑很清晰。下面给你两种实用的实现方案,以Python的pandas工具为例(这是处理表格数据最常用的工具之一):
解决方法:找出满足数值≥0.6的列编号
假设你的原始数据是这样的表格结构:
import pandas as pd # 模拟测试数据 data = { '列1': [0.7, 0.3, 0.6, 0.45], '列2': [0.3, 0.7, 0.4, 0.55] } df = pd.DataFrame(data)
方式1:逐行判断(直观易理解)
如果你数据量不大,用apply逐行检查的方式最直观,直接返回对应列的编号(这里默认列编号从1开始,符合日常业务习惯):
def get_target_col(row): # 判断列1是否达标 if row['列1'] >= 0.6: return 1 # 判断列2是否达标 elif row['列2'] >= 0.6: return 2 # 都不满足则返回None else: return None # 新增一列存储结果 df['目标列编号'] = df.apply(get_target_col, axis=1)
方式2:向量化操作(高效处理大数据)
如果你的数据量很大,逐行循环会变慢,用向量化操作能大幅提升效率:
import numpy as np # 定义列编号数组(对应两列的编号) col_numbers = np.array([1, 2]) # 找出每行中≥0.6的位置,映射为对应列编号,求和后得到结果(因为最多只有一个达标值) df['目标列编号'] = np.where(df >= 0.6, col_numbers, np.nan).sum(axis=1) # 把都不满足的0值转为None df['目标列编号'] = df['目标列编号'].replace(0, None)
最终示例结果
对于上面的测试数据,生成的目标列编号列结果如下:
0 1
1 2
2 1
3 NaN
Name: 目标列编号, dtype: float64
完全符合预期:第一行列1达标返回1,第二行列2达标返回2,第三行列1刚好达标返回1,第四行都不满足则返回NaN(即None)。
内容的提问来源于stack exchange,提问作者user3639100
相关产品推荐
相关产品推荐

