我有一个由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内置了插值,但我不知道如何以有效的方式在现有行之间添加行。因此,我甚至没有达到我可以应用插值技术的部分
谢谢你的意见
目前没有回答
相关问题 更多 >
编程相关推荐