如何在Pandas中按decimal列拆分并格式化数据表格?
按Decimal列拆分生成小数格式化表格的实现方法
假设你的原表格包含id、name、decimal三列(其中decimal是整数,代表要生成的小数位数),目标是将每行拆分为多行,每行对应一个符合指定位数的小数(比如decimal=2时生成0.01到0.99的所有两位小数),同时保留原行的id和name,以下是几种常用工具的实现方式:
方法1:Excel Power Query(高效批量处理)
这是最适合大量数据的方法:
- 选中你的数据表格,点击数据选项卡 → 从表格/区域,把数据导入Power Query编辑器。
- 选中
decimal列,点击添加列 → 自定义列,输入公式生成对应小数序列:
公式说明:根据List.Numbers(0.01, Number.Power(10, [decimal])-1, 0.01^[decimal])decimal的值,生成从0.01开始、步长为对应精度(比如decimal=2时步长0.01)的序列,总个数为10^decimal - 1(比如decimal=2时是99个)。 - 点击自定义列右侧的展开箭头,选择展开到新行,每个小数就会单独成一行。
- 点击关闭并上载,就能得到目标格式的表格。
方法2:Excel公式(适合小数据量)
如果不想用Power Query,可通过公式+填充实现:
- 先在辅助列(比如D列)计算每行需要生成的行数:
=10^C2 - 1(C列是原decimal列)。 - 生成总序列:在空白单元格输入
=SEQUENCE(SUM(D:D)),得到从1到总行数的序列。 - 匹配
id和name:用XLOOKUP匹配对应行,比如id列公式:=XLOOKUP(ROW(A1), SCAN(0, D:D, LAMBDA(a,b,a+b)), A:A, , -1)name列同理,把公式里的A:A换成B:B。 - 生成小数:
下拉填充所有公式即可。=ROUND(ROW(A1)/10^XLOOKUP(ROW(A1), SCAN(0, D:D, LAMBDA(a,b,a+b)), C:C, , -1), XLOOKUP(ROW(A1), SCAN(0, D:D, LAMBDA(a,b,a+b)), C:C, , -1))
方法3:Google Sheets一键生成
在Google Sheets中用数组公式快速实现:
假设原数据在A2:C区域(A=id,B=name,C=decimal),在空白单元格(比如E2)输入:
=FLATTEN(ARRAYFORMULA(IF(C2:C="",,MAP(A2:A,B2:B,C2:C,LAMBDA(id,name,d,{IFERROR(SEQUENCE(10^d-1,1,id,0)),IFERROR(SEQUENCE(10^d-1,1,name,0)),ROUND(SEQUENCE(10^d-1,1,0.01,0.01^d),d)}))))
回车后会自动生成所有拆分后的行,包含id、name和对应小数。
内容的提问来源于stack exchange,提问作者alex4994
相关产品推荐
相关产品推荐

