在完全阶乘值和插值值之间添加行

2024-05-05 16:41:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由3列组成的数据框架,其中2列是完全阶乘的,第三列很容易计算,加上一些噪声,但是为了便于讨论,我们将去掉噪声。下面显示了一个可还原的示例:

from itertools import product
import pandas as pd
mylist = list(product([0,10,20], [0,10,20]))
df= pd.DataFrame(data=mylist, columns=["A", "B"])
df['C'] = df['A'] **2 + df['B'] ** 2
print(df.head(10))

其结果是:

    A   B    C
0   0   0    0
1   0  10  100
2   0  20  400
3  10   0  100
4  10  10  200
5  10  20  500
6  20   0  400
7  20  10  500
8  20  20  800

我多么希望提高分辨率。例如,不是按10步走,而是按1步走

目前我所做的是添加一个全新的数据帧,其代码与上面相同,但范围更大。为'A''B'的每个可能的完全阶乘组合获取一行。 后记我为c行拟合了一个多项式回归,并将其应用于新的数据帧

我当前的代码如下所示:

new_a_list = list(range(min(a_list), max(a_list)+1, 1))
new_b_list = list(range(min(b_list), max(b_list)+1, 1))
my_new_list = list(product(new_a_list, new_b_list))
new_df= pd.DataFrame(data=my_new_list, columns=["A", "B"])
model =  make_pipeline(PolynomialFeatures(2), linear_model.LinearRegression())
model.fit(df[['A', 'B']], df['C'])
new_df['C'] = model.predict(new_df[['A', 'B']])
print(new_df.head(20))

这将产生以下输出:

    A   B             C
0   0   0  1.136868e-13
1   0   1  1.000000e+00
2   0   2  4.000000e+00
3   0   3  9.000000e+00
4   0   4  1.600000e+01
5   0   5  2.500000e+01
6   0   6  3.600000e+01
7   0   7  4.900000e+01
8   0   8  6.400000e+01
9   0   9  8.100000e+01
10  0  10  1.000000e+02
11  1   0  1.000000e+00
12  1   1  2.000000e+00
13  1   2  5.000000e+00
14  1   3  1.000000e+01
15  1   4  1.700000e+01
16  1   5  2.600000e+01
17  1   6  3.700000e+01
18  1   7  5.000000e+01
19  1   8  6.500000e+01

我确实知道pandas内置了插值,但我不知道如何以有效的方式在现有行之间添加行。因此,我甚至没有达到我可以应用插值技术的部分

谢谢你的意见