Considere o seguinte dataframe pandas
reference sicovam label id date TTM price
0 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 18 52.69
1 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 30 NaN
2 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 49 53.11
3 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 60 NaN
4 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 77 53.69
5 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 90 NaN
6 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 109 54.42
7 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 137 55.15
8 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 171 55.80
9 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 180 NaN
10 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 15 50.04
11 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 30 NaN
12 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 46 50.52
13 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 60 NaN
14 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 74 51.17
15 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 90 NaN
16 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 106 51.95
17 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 134 52.73
18 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 168 53.46
19 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-05 180 NaN
Após agrupar pelas colunas reference
, sicovam
, e , gostaria de preencher os valores da coluna por meio de interpolação linear sobre o label
valor , ou seja, no contexto da fórmula de interpolação linear, e é a variável.id
date
NaN
price
TTM
price
y
TTM
x
Até agora, construí as seguintes linhas.
def intepolate_group(group):
group["price"] = group["price"].interpolate(method='linear', limit_direction='both', axis=0)
return group
new_df = df.groupby(["reference","sicovam","label","id","date"])[["TTM","price"]].apply(intepolate_group)
No entanto, o resultado que obtenho é a interpolação linear sobre os números de índice por grupo. Por exemplo, para a parte seguinte do conjunto de dados, obtenho 54.06
em vez de 53.99
. O que ainda preciso para interpolar sobre a variável TTM?
PS: Quero evitar mascarar via loop (em vez de agrupar) e definir o TTM
como índice, porque o dataframe é muito grande e esse cenário leva um tempo considerável.
4 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 77 53.69
5 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 90 NaN
6 SCOM_WTI 68801903 WTI Nymex BBG:CL 2015-01-02 109 54.42
Aqui está uma abordagem:
Saída:
Explicação
df.set_index
e apliquedf.groupby
.groupby.transform
e usepd.Series.interpolate
commethod='index'
.Series.values
para atribuir o resultado de volta adf['price']
.