Pandas random hakkında

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?

a

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.

1 Beğeni

Hocam bu gösterdiğim yere ne koymam gerekiyor ki kırmızı uyarı gelmesin?

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

1 Beğeni

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.