beginner – Convert a matrix (“DataFrame”) to printable string

pub fn (df DataFrame) str() string {
    // measure column widths
    mut width := ()int{len: 1 + df.cols.len}
    mut str_sers := ()Series{len: 1 + df.cols.len}
    mut sers := (df.index)
    sers << df.cols
    mut i := 0
    for ser in sers {
        str_sers(i) = ser.as_str()
        mut row_strs := str_sers(i).get_str().clone()
        row_strs << (ser.name)
        width(i) = maxlen(row_strs)
        i++
    }

    // columns
    pad := '                                        '
    mut row_strs := ()string{len: sers.len}
    i = 0
    for ser in sers {
        w := width(i)
        row_strs(i) = pad(0..(w - ser.name.len)) + ser.name
        i++
    }
    mut s := row_strs.join('  ')

    // cell data
    l := df.len()
    if l == 0 {
        s += 'n(empty DataFrame)'
    }
    for r in 0 .. l {
        i = 0
        for ser in str_sers {
            w := width(i)
            row_strs(i) = pad(0..(w - ser.get_str()(r).len)) + ser.get_str()(r)
            i++
        }
        s += 'n' + row_strs.join('  ')
    }
    return s
}

While I understand that “V is a simple language,” I find myself repeating a lot of stuff. For instance the whole first block, “measure column widths,” could beautifully be accomplished by two simple list comprehension lines in Python. Is there some way to simplify the allocate array, initialize the index pointer, loop-assign, increase index pointer code? Any equivalent to Python’s enumerate() would go a long way…

What do I do about the pad thing? Sure, it will work in 99.9% instances, but would be nice with an arbitrary length solution (such as ' '*n in Python).

Performance-wise I’m not concerned for this function in particular, but I’m curious if there are any obvious blunders? It looks close to C to me, and it’s probably only cache handling that could be a problem? I’m assuming the three mutable arrays end up on the heap? If so: anything I can do about that?

I’m left with the sense that “simple language” in this case is equivalent to “hard-to-read implementation.” With just a few more features it could be both simple and easy to read? What is your impression?

python – Tabela vazia (“Empty DataFrame”) e ambiguidade de comparação no Pandas

Olá, estou tentando a uns dias montar um programa, o grosso nele está funcionando porém existem duas exigências que não se realizam de jeito nenhum. que são elas:

  • Quantidade e o total cobrado de exames envolvendo EcoDoppler e Doppler que foram efetuados;
  • Quantidade de exames com valores unitários(“vl_unit”) 30% acima ou abaixo do valor de referência(“vl_ref”).

No primeiro eu já tentei usar todo tipo de comando para realizar a busca das palavras “Doppler” e “Ecodoppler”, porém ele só me retorna Empty DataFrame; se caso eu colocar na busca da coluna servico >= Doppler ele me retorna uma lista de palavras que até contem o doppler mas também retornar palavras que não contem ao mesmo tempo, mas se eu colocar == ele da uma tabela vazia e se eu colocar <= funciona tambpem porem no mesmo esquema do >=.

E no segundo eu já tentei usar todo tipo de separação para a condição if comparar mas ele sempre fala que o termo está ambíguo, não sei mais o que fazer para conferir se tem algum numero na coluna “vl_unit” que seja 30% maior, ou menor, na “vl_ref”.

Segue o Código:
import pandas as pd

contas= pd.read_csv(‘contas.csv’, sep = ‘;’)

#Quantidade e o total cobrado de exames envolvendo EcoDoppler e Doppler foram efetuados
doppler = contas.query(“servico == ‘Doppler'”)
dopplerMaior = contas.query(“servico >= ‘Doppler'”)
print(“nnTabela vazia:n”,doppler)
print(“nnTabela mostrando o dopplerMaior (que não é o que quero): n”,dopplerMaior(‘servico’))
#Quantidadede exames com valores unitários 30% acima ou abaixo do valor de referência
MaiorQueTrinta = ()
if ((contas(‘vl_unit’)) == (contas(‘vl_ref’)*(1.3))):
MaiorQueTrinta.append(contas(‘vl_unit’))
print(MaiorQueTrinta)

Gostaria apenas de saber o que está acontecendo e o que está dando errado. Para malhor ajuda vou colocar um treixo do arquivo CSV para teste:

matric;sexo; idade ;atend;tuss;servico;plano;vl_unit;vl_ref;qtde
14993;F; 60 ;06/12/2017;20201010;ACOMPANHAMENTO CLINICO DE TRANSPLANTE RENAL NO PERIODO DE INTERNACAO DO RECEPTOR;1077 ;210.00;202.01;1
10258;F; 27 ;14/03/2016;31602037;ANESTESIA GERAL OU CONDUTIVA PARA REALIZACAO DE BLOQUEIO NEUROLITICO;1145 ;492.99;316.02;1
12343;M; 86 ;14/02/2016;16020065;ANESTESIA P/ANGIOGRAFIA CAROTIDA BILAT;1132 ;338.02;160.20;2
10535;M; 50 ;14/07/2016;16020065;ANESTESIA P/ANGIOGRAFIA CAROTIDA BILAT;1091 ;325.21;160.20;11
11500;F; 38 ;31/08/2016;16020065;ANESTESIA P/ANGIOGRAFIA CAROTIDA BILAT;1112 ;257.92;160.20;4
10352;F; 14 ;05/09/2017;10101020;CONSULTA EM DOMICILIO;1127 ;107.07;101.01;1
11096;F; 62 ;08/09/2017;10101020;CONSULTA EM DOMICILIO;1190 ;208.08;101.01;1
10616;F; 45 ;01/10/2016;40901360;DOPPLER COLORIDO DE VASOS CERVICAIS ARTERIAIS BILATERAL (CAROTIDAS E VERTEBRAIS);1069 ;625.79;409.01;1
11861;M; 57 ;02/11/2016;40901360;DOPPLER COLORIDO DE VASOS CERVICAIS ARTERIAIS BILATERAL (CAROTIDAS E VERTEBRAIS);1075 ;392.65;409.01;1
13610;F; 58 ;07/03/2016;40901076;ECODOPPLERCARDIOGRAMA COM ESTRESSE FARMACOLOGICO;1085 ;797.57;409.01;2
10191;M; 29 ;24/10/2016;40901076;ECODOPPLERCARDIOGRAMA COM ESTRESSE FARMACOLOGICO;1065 ;813.93;409.01;1
14771;M; 56 ;27/09/2017;31602614;PORTE ANESTESICO 2;1011 ;445.60;316.03;4
10023;M; 59 ;28/09/2017;31602614;PORTE ANESTESICO 2;1003 ;347.63;316.03;1

Por favor, preciso muito apenas dessas duas condições.
inserir a descrição da imagem aqui

Python Dataframe generate trendline prices for future dates

I’m looking to forecast a trendline from a stock’s last pivot high or pivot low and store the trendline values in a pandas series. I’m looking to use this data to run a daily scan so that when the stock price closes above/below the trendline the scan will alert me. I’ve attached an image that shows a 45-degree trendline from the last pivot low of AAPL stock. I would like to be able to compute the trendline and store it in a table instead of manually drawing the lines on a chart.

Thanks

enter image description here

python – Reemplazar los valores dentro una columna de DataFrame

estoy comenzando en la programación con Python y en el mundo de análisis de datos, en este momento estoy con un pequeño proyecto, pero estoy un poco atascado, ya que no se como reemplazar los valores de una columna de un dataframe condicionalmente.

Por ejemplo:

En esta tabla tengo 2 columnas una de la medida y otra de la unidad en la que se midio.

Mi idea es convertir todas las “pulgada” en 2,5 y todos los “centímetro” en 1, para así multiplicar la longitud por la “unidad de medida” que ahora son 1 y 2.5, para obtener todas las medidas en cm y poder trabajar en una sola unidad.

introducir la descripción de la imagen aquí

mi idea fue convertir la columna “unidad de medida” en una lista y luego con un bucle reemplazar los valores, pero algo debo haber hecho mal porque no me funciona.

moneda_list = data("moneda").values.tolist()

for i in moneda_list:
    if i == "UF":
        i= 30000

nota: La tabla que mostré anteriormente la hice solo como ejemplo, las tabla original que es la que corresponde con el código que les muestro es muy distinta

Pero al imprimir posteriormente “moneda_list” me sigue saliendo la lista original sin reemplazar ningún valor.

Les agradezco de antemano si me ayudan a ver mi error o si conocen otra manera mas facil de obtener el resultado que busco.

How to plot the subplots of dataframe?

Lets Say I have data frame of describe() . What Describe dataframe does , it shows the 25% , 50% , mean etc. I have 33 columns Now If I want to plot the subplots for better visualization . How could it be done?

Split single rows into multiple rows using a cell for conditional formatting in pandas dataframe

How do I get multiple lines with all the other column values as same but the PO number line split into singular values.
This Is my data
This is how I want it

python – How do I include my “for” loop value in dataframe?

I have a code that scraped soccer games. I have added values but I am unable to include in the dataframe.

How can I improve my code?

import os
import pandas as pd
from selenium import webdriver
from tabulate import tabulate
from datetime import datetime
import time
from bs4 import BeautifulSoup as bs 

start = datetime.now()

browser = webdriver.Chrome()


class GameData:

    def __init__(self):
        self.date = ()
        self.time = ()
        self.game = ()
        self.score = ()
        self.home_odds = ()
        self.draw_odds = ()
        self.away_odds = ()


def parse_data(url):
    browser.get(url)
    df = pd.read_html(browser.page_source, header=0)(0)
    time.sleep(3)
    html = browser.page_source
    soup = bs(html,"lxml")
    cont = soup.find('div', {'id':'wrap'})
    conti = cont.find('div', {'id':'col-content'})
    content = conti.find('table', {'class':'table-main'}, {'id':'tournamentTable'})
    main = content.find('th', {'class':'first2 tl'})
    count = main.findAll('a')
    country = count(1).text
    league = count(2).text
    game_data = GameData()
    game_date = None
    for row in df.itertuples():
        if not isinstance(row(1), str):
            continue
        elif ':' not in row(1):
            game_date = row(1).split('-')(0)
            continue
        game_data.date.append(game_date)
        game_data.time.append(row(1))
        game_data.game.append(row(2))
        game_data.score.append(row(3))
        game_data.home_odds.append(row(4))
        game_data.draw_odds.append(row(5))
        game_data.away_odds.append(row(6))
    browser.quit()
    return game_data, country, league

# You can input as many URLs you want
urls = {
"https://www.oddsportal.com/soccer/europe/champions-league/results/"
}

if __name__ == '__main__':

    results = None

    for url in urls:
        game_data, country, competition = parse_data(url)
        result = pd.DataFrame(game_data.__dict__)
        if results is None:
            results = result
        else:
            results = results.append(result, ignore_index=True)


print('The country is',country)
print('The competition is', competition)
print(tabulate(results.head(), headers='keys', tablefmt="github"))
end = datetime.now()
time_taken = end - start
print('Time taken to complete: ', time_taken)

result:

The country is  Europe
The competition is Champions League
|    | date        | time   | game                                 | score   |   home_odds |   draw_odds |   away_odds |
|----|-------------|--------|--------------------------------------|---------|-------------|-------------|-------------|
|  0 | 17 Mar 2021 | 20:00  | Bayern Munich - Lazio                | 2:1     |        1.35 |        6.02 |        7.53 |
|  1 | 17 Mar 2021 | 20:00  | Chelsea - Atl. Madrid                | 2:0     |        2.33 |        3.1  |        3.49 |
|  2 | 16 Mar 2021 | 20:00  | Manchester City - B. Monchengladbach | 2:0     |        1.28 |        6.25 |       10.17 |
|  3 | 16 Mar 2021 | 20:00  | Real Madrid - Atalanta               | 3:1     |        2.26 |        3.6  |        3.16 |
|  4 | 10 Mar 2021 | 20:00  | Liverpool - RB Leipzig               | 2:0     |        2.37 |        3.8  |        2.85 |
Time taken to complete:  0:00:15.875088

I want to include the country and competition in the dataframe results

p.s. I felt “Improving my “for” loop” was a better title but the rules did not allow. Mods can delete this statement

python – Calculando diferença entre primeira e ultima linha em um pandas dataframe

Eu tenho um dataframe do pandas com cinco linhas 3 três colunas. Eu quero criar uma função onde o meu código retorne as colunas em que a última linha seja maior que a primeira linha. No exemplo do meu código eu quero que ele me gere uma lista com o nome da coluna ‘Temp01’. Eu me atrapalhei na hora de criar o if/else para verificar as colunas cuja ultima linha seja maior que a primeira. Abaixo segue meu código:

#Importa as Bibliotecas Pandas e Numpy
import pandas as pd

#Cria do Dataframe
df0 = pd.DataFrame({'Temp01':(10,20,30,40,15),'Temp02':(50,60,70,70,45),'Temp03':(80,90,100,100,75)})

#Separa Colunas cuja ultima linha seja maior que a primeira
alta =()#Tendência de Alta

for column in df0.columns: 
  if df0.column(-1)> df0.column(0):
    text = column
    alta.append(text)
  else:
    pass
print(alta)

pandas – Python Dataframe Group by month year

I have a dataset that has a date time column, and I wish to group them by month and year before I plot them into a chart.

orders(('order_purchase_timestamp')).groupby(pd.Grouper(freq="M"))

throws an error

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index

enter image description here

How to identify numeric values in a dataframe column with more than 10+ digits using pyspark

I am trying to identify numeric values from a column. I did the below option to achieve the same.

But for ‘7877177450’ it is showing as non-numeric.According to my scenario the ID’s can be number with 10+ digits also.

How to make that work?

values = (('695435',),('7877177450',),('PA-098',),('asv',),('23456123',))
df = sqlContext.createDataFrame(values,('ID',))
df.show()
df = df.withColumn("Status",F.when((col("ID").cast("int").isNotNull()) ,lit("numeric")).otherwise(lit("non-numeric")))
df.show()

+----------+
|        ID|
+----------+
|    695435|
|7877177450|
|    PA-098|
|       asv|
|  23456123|
+----------+

+----------+-----------+
|        ID|     Status|
+----------+-----------+
|    695435|    numeric|
|7877177450|non-numeric|
|    PA-098|non-numeric|
|       asv|non-numeric|
|  23456123|    numeric|
+----------+-----------+