如何生成每行有效列数与行值匹配的三角形DataFrame?
实现方法
可以通过以下步骤用Pandas实现需求:
- 确定目标列范围:先获取输入DataFrame中
number列的最大值,以此确定需要生成的C1到Cn列的数量。 - 批量生成目标列:利用numpy的广播特性,逐行判断每个
Ck列是否需要填充对应序号(当k≤当前行的number值时填充k,否则填充NaN)。
完整代码示例
import pandas as pd import numpy as np # 创建输入DataFrame df = pd.DataFrame({'number': [1, 2, 3, 4, 6]}) # 获取number列的最大值,确定C列的数量 max_num = df['number'].max() # 生成C列的列名列表 c_columns = [f'C{i}' for i in range(1, max_num + 1)] # 利用广播和条件判断填充C列的值 df[c_columns] = np.where( np.arange(1, max_num + 1) <= df['number'].values[:, np.newaxis], np.arange(1, max_num + 1), np.nan ) print(df)
代码说明
np.arange(1, max_num + 1)生成从1到最大值的数组,对应每个C列的序号。df['number'].values[:, np.newaxis]将number列转换为二维数组,实现与C列序号数组的广播比较。np.where根据比较结果填充对应序号或NaN,批量生成所有C列的值。
运行代码后即可得到你需要的结果DataFrame。
内容的提问来源于stack exchange,提问作者Jg9912.
相关产品推荐
相关产品推荐

