如何为Pandas DataFrame按行百分比生成特定重复数值列?
解决方法
你的问题出在np.resize是循环重复原数组来补全长度,而不是按分段连续填充。要实现按10%区间连续赋值,有两种简洁的方式:
方法一:手动构造分段数组
先计算每个数值需要重复的行数,再用np.repeat生成连续的数组:
import numpy as np import pandas as pd # 假设你的DataFrame是df,总行数153 n = len(df) # 计算每个区间的行数:基础行数+余数分配 base_rows = n // 10 # 15行 extra_rows = n % 10 # 剩余3行,分配给前3个区间 # 生成每个数值对应的重复次数 repeat_counts = [base_rows + 1 if i < extra_rows else base_rows for i in range(10)] # 生成连续的目标数组 target_values = np.repeat(range(10, 110, 10), repeat_counts) # 赋值给DataFrame df['new_column'] = target_values
这样前3个数值(10、20、30)各占16行,后面7个数值各占15行,总和刚好153行,完全符合“每10%区间连续赋值”的要求。
方法二:用pd.qcut自动分区间
如果想更简洁,用pd.qcut可以自动将行索引分成10个等频区间,直接映射到目标数值:
import pandas as pd # 给DataFrame添加新列 df['new_column'] = pd.qcut(df.index, q=10, labels=range(10, 110, 10)) # 转换为整数类型(可选) df['new_column'] = df['new_column'].astype(int)
qcut会自动处理行数不是10倍数的情况,保证每个区间的行数尽可能均匀,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者user308827
相关产品推荐
相关产品推荐

