Python循环迭代后创建新列:实现tau列的表格化输出
用Pandas/Numpy实现通用的tau表格生成方案
问题背景
原代码通过嵌套循环处理proba列表生成一维tau数组,但实际需要将结果整理为以proba为第一列,每行对应原proba元素、每列是对比后tau值的表格形式。
原代码:
proba=[12,65,1,54] tau=[] for i in range(len(proba)): for j in range(len(proba)): if proba[j]>=proba[i]: tau.append(1) else: tau.append(0) print(tau)
输出:
[1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1]
Pandas 实现方案
利用Pandas的广播特性,直接完成元素间对比,生成符合要求的表格,代码简洁且支持任意长度的proba列表:
import pandas as pd proba = [12, 65, 1, 54] # 将proba转为Series,方便后续广播操作 proba_series = pd.Series(proba, name='proba') # 生成tau矩阵:每行对应原proba元素与所有元素的对比结果(>=则为1,否则0) tau_matrix = (proba_series.values >= proba_series.values[:, None]).astype(int) # 构建DataFrame并设置tau列名 df = pd.DataFrame(tau_matrix, columns=[f'tau{i+1}' for i in range(len(proba))]) # 把proba列插入到最前面 df.insert(0, 'proba', proba) # 打印无索引的表格 print(df.to_string(index=False))
输出:
proba tau1 tau2 tau3 tau4 12 1 0 1 0 65 1 1 1 1 1 0 0 1 0 54 1 0 1 1
Numpy 实现方案
用Numpy的广播功能生成对比矩阵,再格式化输出成表格样式,适合不需要DataFrame的场景:
import numpy as np proba = [12, 65, 1, 54] proba_arr = np.array(proba) # 广播对比生成tau矩阵,布尔值转整数 tau_arr = (proba_arr >= proba_arr[:, np.newaxis]).astype(int) # 格式化输出表格 # 打印表头 header = ['proba'] + [f'tau{i+1}' for i in range(len(proba))] print(' '.join(f'{col:<8}' for col in header)) # 逐行打印数据 for p, row in zip(proba, tau_arr): row_str = [str(p)] + [str(num) for num in row] print(' '.join(f'{val:<8}' for val in row_str))
输出:
proba tau1 tau2 tau3 tau4 12 1 0 1 0 65 1 1 1 1 1 0 0 1 0 54 1 0 1 1
内容的提问来源于stack exchange,提问作者bhushan bowlekar
相关产品推荐
相关产品推荐

