data.tsv dosyasında aşağıdaki tek sıra gibi bir milyon sıra var. Aşağıdaki kodda da gördüğünüz gibi bunlardan rastgele bir tane seçiyorum.
Sorum şu, mesela “avarageRating” değerine göre çağırmak istiyorum diyelim. Yani yukarıdaki gibi random bir sıra üretsin ama mesela atıyorum "avarageRating"i 7’den yüksek olanlar arasındakilerden random yapsın.
Bunu yaptıktan sonra da yanındaki “tt0726284” değerini nasıl alırım?
avg_ratingi_7_den_yuksek_olanlar = df[df.averageRating > 7]
random_bir_eleman = avg_ratingi_7_den_yuksek_olanlar.sample(n=1)
random_elemanin_tconst_degeri = random_bir_eleman["tconst"].item()
https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html
Then_Shiffman kıralsın. Çok teşekkürler. Bu arada saatlerdir vermiş olduğun linki okuyordum. Ama kısa yoldan yazman daha iyi oldu. Mantığı anladım. Eyvallah.
O satırı ve üstündekini birleştirebilirsiniz:
iyi_filmler = df[(df.averageRating > 8) & (df.numVotes > 10_000)]
Burada köşeli parantezlerin içine yazdıklarımız “maske” diye geçiyor. Filtrelemeye olanak sağlıyorlar. Eğer sadece mesela df.averageRating > 8
yazıp yazdırırsanız True
ve False
'lardan müteşekkil bir Series
elde edersiniz. Bu "maske"yi DataFrame
üzerinde indeks olarak kullandığımızda size seride True
'ya karşılık gelen indekslerin satırlarını filtreleyerek döndürüyor. &
operatörünün yaptığı ise iki maskeyi “and” ile bağlamak yani “hem bunu hem de şunu” sağlayanları filtrele diyoruz.
Uyarıyı alma sebebiniz bu iki maskeyi ardı ardına ayrı bir şekilde kullandığınızda ilk maske sonucu düşen indekslerin bazılarının ikinci maskede var olması. Yani veride öyle film(ler) var ki oy sayısı 10_000’den yüksek ama reytingi 8’den yüksek değil. Dolayısıyla filtrelemeyi iki aşamada değil de tek aşamada hallediyoruz zira iki (veya daha fazla) aşama söz konusu olduğunda bir aşamadan sonra gelenin sağlandığı yerler öncekilerin alt kümesi olmayabilir; ama ilki verileri kırptıktan (filtreledikten) sonra diğerinin orijinal indekslere erişimi olmuyor.
Yine de iki aşamada yapmak isterseniz ikinci filtrelemede içeriye halihazırda filtrelenmiş DataFrame
'i gönderin:
avg_ratingi_7_den_yuksek_olanlar = df[df.averageRating > 7]
# içerde indekslenen DataFrame'e dikkat - df değil:
ve_toplam_oyu_10_000_den_fazla_olanlar = avg_ratingi_7_den_yuksek_olanlar[avg_ratingi_7_den_yuksek_olanlar.numVotes > 10_000]
Bir de mümkünse kodlarınızı resim olarak değil yazı olarak paylaşmanızı rica ederim Forumda kod paylaşılırken kullanılan yöntemler
Hocam size ne kadar teşekkür etsem azdır. Çok sağolun, varolun. Sizin gibi insanlar bu ülkede olduğu sürece daha da ilerilere doğru atılacağımdan hiç şüphem yok.