看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
有这样的一组数学方程:a+b=80,x-y=60,a+x=130,b+y=80,求解 a、b、x、y 的值。我们利用多层导引中的 pd.MultiIndex.from_product()
对给定有元素生成笛卡尔积的特性,先将所有潜在答案生成,然后再筛选出满足方程公式要求的数据。
a+b=80
x-y=60
a+x=130
b+y=80
%%time
(
pd.MultiIndex
.from_product([range(130)]*4, names=['a', 'b', 'x', 'y'])
.to_frame()
.loc[lambda x:(x.a+x.b==80) & (x.x-x.y==60) & (x.a+x.x==130) & (x.b+x.y==80)]
)
'''
CPU times: user 20.1 s, sys: 44.9 s, total: 1min 5s
Wall time: 1min 20s
a b x y
35 45 95 35
'''
这是一种暴力解题的方法。由于有四个0到130的排列组合形成的矩阵,生成的数据非常庞大,所以根据计算机性能执行时间会长一些。
如果要通过算法实现真正的 Python 解数据方程可以使用 sympy 包,它能实现数学符号运算。
更新时间:Oct. 24, 2024, 9:15 a.m. 标签:pandas python 方程