You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构造行列双轴数值均匀分布的Pandas DataFrame?

双轴均匀数值填充实现方案

核心前提

要同时满足行、列两个方向的数值计数均匀,参数必须先符合数学约束:

  • 列数cols必须能被n整除,保证每行每个值出现次数为cols/n(整数)
  • 行数rows必须能被n整除,保证每列每个值出现次数为rows/n(整数)
    你给出的示例参数cols=8, rows=4, n=4刚好满足上述约束,可实现严格双轴均匀。

实现逻辑

不需要用排列组合随机拼接,直接用循环移位规则生成矩阵即可:任意位置(i,j)(第i行、第j列)的取值为(i + j) % n,天然满足:

  • 同一行内每向右一列,值+1后对n取模,每n列完成一次循环
  • 同一列内每向下一行,值+1后对n取模,每n行完成一次循环
    两个方向都能保证所有值出现次数完全相等。

可直接运行的代码

import numpy as np
import pandas as pd

def create_uniform_df(cols: int, rows: int, n: int) -> pd.DataFrame:
    # 参数合法性校验
    if cols % n != 0 or rows % n != 0:
        raise ValueError("cols和rows必须均可被n整除,否则不存在严格双轴均匀的填充结果")
    # 生成行列索引网格
    row_grid, col_grid = np.indices((rows, cols))
    # 核心计算:循环移位生成矩阵
    mat = (row_grid + col_grid) % n
    # 组装为带指定索引的DataFrame
    df = pd.DataFrame(
        mat,
        index=[f"row_{i}" for i in range(rows)],
        columns=[f"col{i}" for i in range(cols)]
    )
    return df

效果验证

用你给出的参数测试:

params = {'cols': 8, 'rows': 4, 'n': 4}
df = create_uniform_df(**params)
print(df)

输出与期望结果完全一致:

col0  col1  col2  col3  col4  col5  col6  col7
row_0     0     1     2     3     0     1     2     3
row_1     1     2     3     0     1     2     3     0
row_2     2     3     0     1     2     3     0     1
row_3     3     0     1     2     3     0     1     2

行方向计数校验:

print(df.apply(lambda x: x.value_counts(), axis=1))
0  1  2  3
row_0  2  2  2  2
row_1  2  2  2  2
row_2  2  2  2  2
row_3  2  2  2  2

列方向计数校验:

print(df.apply(lambda x: x.value_counts()))
col0  col1  col2  col3  col4  col5  col6  col7
0     1     1     1     1     1     1     1     1
1     1     1     1     1     1     1     1     1
2     1     1     1     1     1     1     1     1
3     1     1     1     1     1     1     1     1

扩展说明

  • 你之前的实现问题在于:随机排列拼接时没有做行与行之间的固定偏移对齐,导致同列内部分值重复、部分值缺失,才会出现计数NaN的问题
  • 如果需要打乱数值顺序避免规律过于明显,只需要先生成0~n-1的随机排列作为映射表,替换矩阵中的对应值即可,双轴均匀的特性不会被破坏

内容的提问来源于stack exchange,提问作者BeRT2me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:03:21