Tablolar Arası Veri Transferi

Merhaba,
df.loc[lambda df: df['shield'] == 8] bu tür lambda fonksiyonu kullanılarak “koşula göre seçim” yapmak elbette mümkün ancak bu tür bir kodla değer değil bir data frame seçmiş oluyoruz.
Örneğin:
df_lambda = df_bina.loc[lambda df_bina : (df_bina["KULLANIM_ALANI"] == "8- TOPLAM DERSLİK SAYISI")]
print(df_lambda) kodunun çıktısı şudur;

Çıktı;

 KURUM_KODU   TİPİ       İLÇE            KULLANIM_ALANI         OKUL_KURUM_ADI  SAYISI
0           11  RESMİ     SARICA  8- TOPLAM DERSLİK SAYISI   Halk Eğitimi Merkezi      22
2           12  RESMİ     BÜNYAN  8- TOPLAM DERSLİK SAYISI       Atatürk İlkokulu      12
3           13  RESMİ   ŞARKIŞLA  8- TOPLAM DERSLİK SAYISI     Atatürk Ortaokulu        5
4           14  RESMİ     SARICA  8- TOPLAM DERSLİK SAYISI      Kirboga İlkokulu        4
6           14  RESMİ     SARICA  8- TOPLAM DERSLİK SAYISI      Kirboga İlkokulu       12
8           16  RESMI     BUNYAN  8- TOPLAM DERSLİK SAYISI    Halk Eğitim Merkezi      14
9           17  RESMİ  ŞARKIŞLA   8- TOPLAM DERSLİK SAYISI     Kutu Tepe İlkokulu      12
13          16  RESMI     BUNYAN  8- TOPLAM DERSLİK SAYISI    Halk Eğitim Merkezi       9
14          20  RESMİ     BÜNYAN  8- TOPLAM DERSLİK SAYISI  Ortaköy Ortaokulu İS-      10
16          22  RESMİ     SARICA  8- TOPLAM DERSLİK SAYISI  Çok Programlı Anadolu       5
17          23   ÖZEL     SARICA  8- TOPLAM DERSLİK SAYISI   OZELSARICA ANAOKULU       12
19          24  RESMİ     BÜNYAN  8- TOPLAM DERSLİK SAYISI        Dereli İlkokulu       4
20          25  RESMİ   ŞARKIŞLA  8- TOPLAM DERSLİK SAYISI      Dereli Ortaokulu        5
22          26  RESMİ     SARICA  8- TOPLAM DERSLİK SAYISI      Atatürk İlkokulu        7

Bu durumda hala 14 ve 16 numaralı KURUM_KODU’na ait birden fazla değer var. Bu değerleri pivot() veya groupby() metotları kullanılarak toplanmalı.

Bu işlemden sonra df_ana ile df_lambda isimli dataframe verileri (concat(), merge(), join() gibi metotlarla birleştirilebileceği gibi, df_ana["DERSLİK_SAYISI"] = df_lambda["SAYISI"] kodu ile ilgili veriler, df_ana["DERSLİK_SAYISI"] sütununa atanabilir.

Seçim yapmak için İki koşul kullanılacaksa and operatörü yerine & işareti kullanılmalı: Örnek 2:
df_lambda = df_bina.loc[lambda df_bina : (df_bina["KULLANIM_ALANI"] == "8- TOPLAM DERSLİK SAYISI") & (df_bina["KURUM_KODU"] == 16)]
print(df_lambda) kodunun çıktısı şudur;

Çıktı;

KURUM_KODU   TİPİ    İLÇE            KULLANIM_ALANI       OKUL_KURUM_ADI  SAYISI
8           16  RESMI  BUNYAN  8- TOPLAM DERSLİK SAYISI  Halk Eğitim Merkezi      14
13          16  RESMI  BUNYAN  8- TOPLAM DERSLİK SAYISI  Halk Eğitim Merkezi       9

Önceki mesajlarda paylaştığım kodlar işe yaramadı mı?
Acaba sorunun tam olarak ne olduğunu mu anlayamadım? Çünkü Paylaştığınız ekran görüntülerine göre verileri oluşturup kodu çalıştırdığımda, sonucu elde ediyorum.
Aşağıdaki kod ile;

  • KURUM_KODU’na ait birden fazla değer varsa toplamlarını alıyor ve bir veri çerçevesinde tutuyorum.
df1 = df_bina.loc[lambda df_bina : (df_bina["KULLANIM_ALANI"] == "8- TOPLAM DERSLİK SAYISI")]
df1 = df1.groupby("KURUM_KODU").sum()["SAYISI"]

Çıktısı:

KURUM_KODU
11    22
12    12
13     5
14    16
16    23
17    12
20    10
22     5
23    12
24     4
25     5
26     7
Name: SAYISI, dtype: int64

df1’i şu şekilde yazsaydık ta aynı sonucu elde ederdik;
df1 = df_bina[df_bina["KULLANIM_ALANI"] == "8- TOPLAM DERSLİK SAYISI"]

df_ana tablosunun index değerini “KURUM_KODU” olarak atayıp df_ana["DERSLİK_SAYISI"] sütun değerlerini df1e atarsak (eşitlersek) sorun çözülüyor gibi görünüyor.

df_ana = df_ana.set_index("KURUM_KODU")

df_ana["DERSLİK_SAYISI"] = df1
print(df_ana)

Çıktı:

             TİPİ      İLÇE                OKUL_KURUM_ADI  DERSLİK_SAYISI
KURUM_KODU                                                               
11          RESMİ    SARICA          HalkEğitimi Merkezi             22.0
12          RESMİ    BÜNYAN             Atatürk İlkokulu             12.0
13          RESMİ  ŞARKIŞLA            Atatürk Ortaokulu              5.0
14          RESMİ    SARICA             Kırboğa İlkokulu             16.0
15          RESMİ    SARICA            Kırboğa Ortaokulu              NaN
16          RESMİ    BÜNYAN           Halk Eğitim Merkezi            23.0
17          RESMİ  ŞARKIŞLA            Kutu Tepe İlkokulu            12.0
18          RESMİ    SARICA           Kutu Tepe Ortaokulu             NaN
19          RESMİ    SARICA             Ortaköy İlkokulu              NaN
20          RESMİ    BÜNYAN            Ortaköy Ortaokulu             10.0
21          RESMİ  ŞARKIŞLA          İmam Hatip Ortaokulu             NaN
22          RESMİ    SARICA  Çok Programlı Anadolu Lisesi             5.0
23          RESMİ    SARICA              Sanica Anaokulu             12.0
24          RESMİ    BÜNYAN              Dereli İlkokulu              4.0
25          RESMİ  ŞARKIŞLA             Dereli Ortaokulu              5.0
26          RESMİ    SARICA              Atatürk İlkokulu             7.0

Konsol ekranında NaN (Not A Number) yazması sizi şaşırtmasın. Vevi çerçevesini dışa aktardığınızda (excel dosyası olarak kaydettiğinizde) ilgili hücreler boş olarak görüntüleniyor.

Birçok dosya ile çalışıyorum ve veriler çok satırlı diyorsunuz.
Farklı dosya içerikleri varsa bunları ya da ekran görüntülerini paylaşırsanız, kodu onlar üzerinde çalıştırarak ta deneyebilirim.