Satırlardaki öğelerin sayısını almanın yanı sıra bir öğenin mevcut olup olmadığını kontrol etmek ve son olarak ilk satırı python'da tutmak nasıl?

0

Soru

Aşağıdaki gibi bir veri çerçevem olduğunu varsayalım:

 df = pd.DataFrame({
        'Column A': [12,12,12, 13, 15, 16, 141, 141, 141, 141],
         'Column B':['Apple' ,'Apple' ,'Orange' ,'Apple' , np.nan, 'Orange', 'Apple', np.nan, 'Apple', 'Apple']}) 

Bu koşullara dayanarak:

  • A sütunundaki değerler tekrarlanırsa, B Sütunundaki 'Turuncu' kelimesini sayın ve yeni C Sütununa yapıştırın (Örneğin, 12 için 3 satır vardır, 'Turuncu' sayısı 1'dir ve bu 1 yeni C sütununda olmalıdır). Yinelenmeyen satırlar için karşılık gelen değerleri yapıştırmanız yeterlidir.

  • A sütunundaki değerler tekrarlanırsa, B Sütunundaki 'Elma' kelimesini sayın ve yeni Sütun D'ye yapıştırın (Örneğin, 12 için 3 satır vardır, 'Elma' sayısı 2'dir ve bu 2 yeni sütun D'de olmalıdır). Yinelenmeyen satırlar için karşılık gelen değerleri yapıştırmanız yeterlidir.

  • A Sütunu nedeniyle tekrarlanan ve yinelenmeyen satırlar için, B Sütununda 'Turuncu' sözcüğü varsa, E Sütununa 'evet' veya 'Hayır' yazın.

Takip eden bir çıktıya sahip olmak istiyorum. Python jupyter not defterinde çalışıyordum, herkes böyle bir çıktı almama yardımcı olabilir mi:

      | Column A | Column B |Column C |Column D |Column E 
----- | -------- | ---------|---------|---------|---------
 0    | 12       | Apple    |1        |2        |Yes   
 1    | 13       | Apple    |0        |1        |No 
 2    | 15       | NaN      |NaN      |NaN      |NaN     
 3    | 16       | Orange   |1        |0        |Yes      
 4    | 141      | Apple    |0        |3        |No   

Şimdiden teşekkür ederim:)

1

En iyi cevabı

2

Sorunuz için güçlü ve basit bir çözüm olmadığını düşünüyorum, ancak aşağıdaki kodu kullanın.

İlk olarak, bir işlev tanımlayın count(x, a) hangisi geri dönüyor nan x içeriyorsa nan aksi takdirde, a'nın x cinsinden oluşma sayısı. İşlev, uygula işlevi için kullanılacaktır.

Ardından, groupby ve apply list işlevini kullanın.

temp = df.copy().groupby('Column A')['Column B'].apply(list)

Bundan sonra, sıcaklık olur

Column A
12         [Apple, Apple, Orange]
13                        [Apple]
15                          [nan]
16                       [Orange]
141    [Apple, nan, Apple, Apple]
Name: Column B, dtype: object

Yani, sıcaklığa bağlı olarak, elma ve portakal sayısını sayabiliriz.

Df'nin kopyaları olduğundan, bunları kaldırdım ve yeni sütunlar ekledim (Sütun C, D ve E).

df.drop_duplicates(subset = ['Column A'], keep = "first", inplace = True)
df['Column C'] = temp.apply(count, a = "Orange").values
df['Column D'] = temp.apply(count, a = "Apple").values
df['Column E'] = df['Column D'].apply(lambda x:1 if x>=1 else 0)

Düzenlemek

Üzgünüm. İşlev sayısını kaçırdım..

def count(x, a):
    if type(x[0]) == float:
        return np.nan
    else:
        return x.count(a)
2021-11-11 12:31:49

Şimdi çıktıyı aşağıdaki gibi alıyorum ve hangisi doğru. 0 1.0 3 0.0 4 NaN 5 1.0 6 0.0 sayılan değerlerin 0 3 4 5 6 numaralı sol tarafının 0 1 2 3 4 5 olarak değiştirilmesi mümkün müdür?
new_bee

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................