如何生成指定结构的Pandas等比数列DataFrame及单行代码实现?
构造指定结构的Pandas DataFrame
需求说明
- 生成从索引1开始的等比数列,索引0为独立值
var1 - 期望得到的DataFrame结构:
os 0 10.000000 <- var1 1 15.000000 <- var2 2 16.500000 <- var2*r 3 18.150000 <- var2*r*r 4 19.965000 5 21.961500 6 24.157650 7 26.573415
现有代码问题
你当前的代码存在两个问题:
- 运算符优先级错误:
var2 * r ** n-1会被解析为(var2 * r**n) - 1,导致所有值都被减1,偏离预期 - 未将
var1插入到索引0的位置
当前代码:
v = 7 n = np.arange(v + 1) var1 = 10 var2 = 15 r = 1.1 df = pd.DataFrame( { "os": var2 * r ** n-1 } ) print(df)
解决方案
方法一:分步构造
先生成从var2起始的等比数列,再将var1插入到索引0位置:
import pandas as pd import numpy as np v = 7 var1 = 10 var2 = 15 r = 1.1 # 生成7个值的等比数列(对应索引1-7) geo_seq = var2 * r ** np.arange(v) # 拼接var1和等比数列,构造DataFrame df = pd.DataFrame({'os': [var1] + list(geo_seq)}) print(df)
方法二:单行代码实现
利用np.concatenate合并数组,直接完成构造:
import pandas as pd import numpy as np var1, var2, r, v = 10, 15, 1.1, 7 df = pd.DataFrame({'os': np.concatenate([[var1], var2 * r ** np.arange(v)])}) print(df)
验证输出
运行上述代码后,会得到符合预期的结果:
os 0 10.000000 1 15.000000 2 16.500000 3 18.150000 4 19.965000 5 21.961500 6 24.157650 7 26.573415
内容的提问来源于stack exchange,提问作者wkamer
相关产品推荐
相关产品推荐

