Pyhton da dataframe de belirli aralıklardaki verilerin max ve min değerlerini bulma

Merhabalar,

Gerek forum da gerekse de python yazım dilinde oldukça yeniyim. siz değerli grup üyelerine ve üstadlara sormak istediğim bir konu var, umarım doğru ifade edebilirim

# LOAD BARS 5m

    bars = exchange.fetch_ohlcv(symbol, timeframe="5m", since = None, limit = 100)
    df = pd.DataFrame(bars, columns=["timestamp", "open", "high", "low", "close", "volume"])
    
   yukarıda şekilde ifade edilen bir veri setinde (100 satırlık) 
  • low kolonu için geçerli olacak şekilde;

    son 3 veri içinde en küçük değer ?

    son 50 veri içinde en küçük değer ?

    son 50 veri içinde - en son veri hariç - en küçük değer ?

    son 50 veri içinde - en son 2 veri hariç - en küçük değer?

    son 50 veri içinde - en son 3 veri hariç - en küçük değer?

    python dilinde nasıl yazılabilir???

şimdiden okuyan, cevap yazan, vakit ayıran herkese teşekkür ederim.

Pandas Veri Çerçeveleri konusunda Türkçe içerik arıyorsan aşağıdaki adrese de bakabilirsin.
Veri Seçim Yöntemleri konusunda bu akşam ilave içerik ekleyeceğim.

https://mhalil.github.io/Python-Pandas.html

Örnek DataFrame;

import pandas as pd
df = pd.read_excel("veri.xlsx")
df.columns=["timestamp", "open", "high", "low", "close", "volume"]
df.head() # ilk 5 veri
timestamp open high low close volume
0 2015-10-30 2004 12096.25 9677 199 565
1 2015-11-24 4808 16680.00 13344 327 675
2 2015-12-19 1158 14451.25 11561 372 669
3 2016-01-13 1964 17387.50 13910 430 595
4 2016-02-07 7936 8317.50 6654 107 596
df.tail() # son 5 veri
timestamp open high low close volume
95 2022-05-01 8391 17843.75 14275 209 816
96 2022-05-26 3305 500.00 400 314 737
97 2022-06-20 3857 375.00 300 349 816
98 2022-07-15 6851 312.50 250 230 635
99 2022-08-09 1579 4587.00 1478 275 596
df["low"].min() # low sütunundaki en düşük değer
100
df["low"].tail(3).min() # low sütunundaki son 3 veri içinde en küçük değer
250
df["low"].tail(50).min() # low sütunundaki son 50 veri içinde en küçük değer
250
df.iloc[51:]["low"].min() # low sütunundaki son 50 veri içinde en küçük değer. Yukarıdaki koda alternatif.
250
df.iloc[51:-1]["low"].min() # low sütunundaki son 50 veri içinde - en son veri hariç - en küçük değer
250
df.iloc[51:-2]["low"].min() # low sütunundaki son 50 veri içinde - en son veri hariç - en küçük değer
300

geri dönüşünüz ve detaylı bilgilendirme için teşekkürler Halil üstadım, emeğinize sağlık…

Rica ederim.
Biz kim üstatlık kim :slight_smile:

df.iloc[51:-2]["low"].min() # low sütunundaki son 50 veri içinde - en son veri hariç - en küçük değer

Bu son 50 veri için olmaz serinin ilk indeksindeki(0.indeks) değerinden 50 sonraki sonraki yani 51. indeksten itibaren sondan -2. indeks dahil olmamak üzere sondan 2 indeks geriye gittiğimiz indekse kadarki değerler, yani baştan 51.indeksten sondan 3.indeks dahil olmak üzere 3.indekse kadar(yani sondan 2.indekse kadar) serideki değerleri alır.

Sondan 50.indeksten itibaren ki değerler için iloc[-50:-2] olması gerekir.

Yani 100 adet veri için doğru olabilir, ama dilimleme yöntemini doğru aktarmak gerekir. dilimleme aralığı içinde ilk değer dahil edilir son değer edilmez ve -(eksili) ifadeler başa yazıldığında “sondan falanca değerden itibaren” anlamına gelir.
iloc[-x:-y]
sondan x.indeksten itibaren, y dahil olmamak üzere sondan y. indekse kadarki değerler
iloc[-x:y]
sondan x.indeksten itibaren, y dahil olmamak üzere baştan y. indekse kadarki değerler
iloc[x:-y]
baştan x.indeksten itibaren, y dahil olmamak üzere sondan y. indekse kadarki değerler
iloc[x:y]
baştan x.indeksten itibaren, y dahil olmamak üzere baştan y. indekse kadarki değerler

değerli katkılarınızdan dolayı teşekkür ederim üstadım…

Olum öyle deme, kendimi , ön yargısı olmadığını kanıtlamak için “Benim Mason arkadaşlarım var” diyen Adnan Oktar gibi hissediyorum. Assassins Creed’de değiliz, yazbel bura kanka sakin ol.

:laughing: :laughing: buralarda çok yeniyim o nedenle yol gösteren herkes benim nazarımda üstaddır, bu tavsiyeni de göz önünde bulunduracağım, sağolasın kardeş…

Soruda;

yukarıda şekilde ifade edilen bir veri setinde (100 satırlık)

ibaresi olduğu için, genel çözüme dönük formül yazmadım. Sadece 100 satırlık veriye yönelik kod yazdım ki, hazırcılığa sebep olmasın, DataFrame için veri çekilen kaynakta her sorguda farklı sayıda satır bulunması halinde alternatif çözüm nasıl olabilir kişiler kendisi düşünüp denesin.

Kod esnasında yaptığım hatadan biri, Önce DataFrame oluşturup ardından Sütun isimlerini belirtmek oldu. Bunu yaparak aslında Excel dosyamda bulunan ilk satır verisini, Sütun ismi ile değiştirerek İlk satır verisini bilmeden silmek oldu.

df = pd.read_excel("veri.xlsx")
df.columns=["timestamp", "open", "high", "low", "close", "volume"]

doğru çözüm aşağıdaki kod;

baslik = ["timestamp", "open", "high", "low", "close", "volume"]
df = pd.read_excel("verim.xlsx", header = None, names = baslik)

Veri Çerçevesi İndex’i 0’dan başlayarak 99’a kadar gidiyor,

df.iloc[51:-2]["low"].min() # low sütunundaki son 50 veri içinde - en son veri hariç - en küçük değer

Yukarıda yazdığım kodda bulunan 51 ifadesi hatalı, kabul ediyorum. Doğrusu sizin de belirttiğiniz gibi şu olmalı:

df.iloc[50:-2]["low"].min()

dilimleme aralığı içinde ilk değer dahil edilir son değer edilmez

ifadeniz Python kodları için geçerli (doğru) ancak Pandas Kütüphanesinde python standart dilimleme işlemlerinin aksine, hem başlangıç hem de bitiş değerinin seçime dahil edilir.

Warning
Note that contrary to usual python slices, both the start and the stop are included

Kaynak: pandas.DataFrame.loc — pandas 2.1.4 documentation

Dökümantasyondakini biliyorum. Şuan bütün popüler kütüphaneleri türkçeye çevirmekle uğraşıyorum yeni bir kanal için. Parametrelerinden argümanlarına, niteliklerine kadar her şeyi…

import pandas as pd

s = pd.Series([0,1,2,3,4,5])

print(s)
print(s.iloc[2:4])

Çıktı:

0    0
1    1
2    2
3    3
4    4
5    5
dtype: int64
2    2
3    3
dtype: int64

O dahildir diye kesin bir standart ifadesi değil, bu fonksiyon(loc) için dahil edilir anlamında…
Bence standart python dilimleme yöntemidir, zira pandas da onla yazıldığı gibi, standardını bu şekilde belirlediyse de, genelde herkes böyle kullanıyor, Pandas’ın genel standardının tutulduğunu düşünmüyorum. Ama bu fonksiyon(loc) için haklısın, diğeri(iloc) için değil.

Şuan bütün popüler kütüphaneleri türkçeye çevirmekle uğraşıyorum yeni bir kanal için. Parametrelerinden argümanlarına, niteliklerine kadar her şeyi…

Desenize Türkçe içeriğe doyacağız.
Youtube Kanali mi? Udemy gibi eğitim platformları mı? Vİdeo eğitim mi düşünüyorsunuz yoksa Yazılı eğitim içeriği gibi bir çalışma mı olacak?

Youtube, insta. Belki site de yaparım diğer çalışmalarımdan fırsat bulursam.

Paylaşınca buradan bildirisiniz değil mi? Takip etmek isterim eminim benim gibi pek çok kişi takip etmek ister.
Biliyorsunuz GitHub, .io uzantılı ücretsiz web hizmeti veriyor.
Ben de profosyonel kalitede olmasa da zaman zaman paylaşım yapıyorum.
https://mhalil.github.io/index.html

1 Beğeni

Burada paylaşacağım linkleri.

1 Beğeni