Como imprimir o processo de equação de janela rolante do dataframe do pandas em python?
Sep 27 2020
Eu criei uma amostra de dataframe do pandas e ele tentou somar para cada 3 linhas:
import pandas as pd
import numpy as np
d={'A':[100,110,120,175,164,169,155,153,156,200]}
df=pd.DataFrame(d)
A
0 100
1 110
2 120
3 175
4 164
5 169
6 155
7 153
8 156
9 200
0 NaN
1 NaN
2 330.0 #this is the result tho
3 405.0
4 459.0
5 508.0
6 488.0
7 477.0
8 464.0
9 509.0
Name: sum, dtype: float64
E eu quero exibir o processo de equação assim:
NaN
NaN
330.0 = 100+110+120
405.0 = 110+120+175
459.0 .
508.0 .
488.0 .
477.0 .
464.0 .
509.0 etc.
Aqui está o código que tentei com o loop for:
for i in range(len(total)):
print("{}={}+{}+{}".format(total[i],"a","b","c"))
nan=a+b+c
nan=a+b+c
330.0=a+b+c
405.0=a+b+c
459.0=a+b+c
508.0=a+b+c
488.0=a+b+c
477.0=a+b+c
464.0=a+b+c
509.0=a+b+c
PS: a, be csubstituído pelo número da trama de dados
Não sei se é possível com a biblioteca pandas ou apenas fazê-lo apenas com a biblioteca python. eu só estou curioso
Respostas
2 SaurabhPorwal Sep 27 2020 at 15:35
d={'A':[100,110,120,175,164,169,155,153,156,200]}
df=pd.DataFrame(d)
for ind in df.index:
if ind == 0 or ind == 1:
print("NaN")
else:
sumOf3Numbers = df["A"][ind-2]+df["A"][ind-1]+df["A"][ind]
print("{}={}+{}+{}".format(sumOf3Numbers,df["A"][ind-2],df["A"][ind-1],df["A"][ind]))
1 MichaelSzczesny Sep 27 2020 at 15:09
É um pouco complicado começar a trabalhar com saída de string condicional
equations = []
df.A.rolling(3).apply(lambda x: equations.append(f'{x.sum()} = {x.iloc[0]}+{x.iloc[1]}+{x.iloc[2]}') or 0)
df.loc[2:, 'equations'] = equations
print(df)
Fora:
A equations
0 100 NaN
1 110 NaN
2 120 330.0 = 100.0+110.0+120.0
3 175 405.0 = 110.0+120.0+175.0
4 164 459.0 = 120.0+175.0+164.0
5 169 508.0 = 175.0+164.0+169.0
6 155 488.0 = 164.0+169.0+155.0
7 153 477.0 = 169.0+155.0+153.0
8 156 464.0 = 155.0+153.0+156.0
9 200 509.0 = 153.0+156.0+200.0
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas