#python #python-3.x #pandas #interpolation
Вопрос:
У меня есть фрейм данных из 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
Я знаю, что в панд встроена интерполяция, но я не знаю, как эффективно добавлять строки между существующими строками. И поэтому даже не доходите до той части, где я мог бы применить свое ноу-хау интерполяции.
Спасибо за весь ваш вклад.