Bir sütundaki satırları başka bir sütundaki tekrarlanan değerlere göre nasıl ekleyebilirim ve son olarak ilk satırı python'da nasıl tutabilirim?

0

Soru

Python pandalar modülünde çok yeniyim.

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

 df = pd.DataFrame({
        'Column A': [12,12,12, 15, 16, 141, 141, 141, 141],
         'Column B':['Apple' ,'Apple' ,'Apple' , 'Red', 'Blue', 'Yellow', 'Yellow', 'Yellow', 'Yellow'],
        'Column C':[100, 50, np.nan , 23 , np.nan , 199 , np.nan , 1,np.nan]
    }) 

veya aşağıdaki gibi bir veri tablom var:


    | Column A | Column B |Column C 
----| -------- | ---------|--------
0   | 12       | Apple    |100     
1   | 12       | Apple    |50      
2   | 12       | Apple    |NaN      
3   | 15       | Red      |23       
4   | 16       | Blue     |NaN      
5   | 141      | Yellow   |199      
6   | 141      | Yellow   |NaN      
7   | 141      | Yellow   |1        
8   | 141      | Yellow   |NaN  


  • A sütunundaki değerler tekrarlanırsa, C Sütununa karşılık gelen değerleri ekleyin ve toplamı yeni D sütununa yapıştırın (Örneğin, 12 için 3 satır vardır, bu nedenle karşılık gelen değerleri 100 + 50 + NaN eklemeliyiz ve toplam sonuç 150 yeni D sütununda saklanmalıdır).

  • A sütunundaki değerler yeni D sütununa (3.satır gibi) doğrudan C Sütun değerlerini yapıştırmayı yinelemiyorsa, ancak NaN için 0 (4. satır gibi) olmalıdır.

Python jupyter not defterinde böyle bir çıktı almama yardım eder misiniz:

      | Column A | Column B |Column C |Column D 
----- | -------- | ---------|---------|---------
 0    | 12       | Apple    |100      |150      
 1    | 15       | Red      |23       |23       
 2    | 16       | Blue     |NaN      |0        
 3    | 141      | Yellow   |199      |200  

add calculated-columns dataframe pandas
2021-11-11 00:34:37
3

En iyi cevabı

5
df.groupby("Column A", as_index=False).agg(B=("Column B", "first"),
                                           C=("Column C", "first"),
                                           D=("Column C", "sum"))
#      Column A         B         C         D
# 0          12     Apple     100.0     150.0
# 1          15       Red      23.0      23.0
# 2          16      Blue       NaN       0.0
# 3         141    Yellow     199.0     200.0
2021-11-11 00:49:50
2

İşte bir yaklaşım

df['Column D'] = df.groupby('Column A')['Column C'].transform('sum')
df = df.drop_duplicates('Column A')

Bu groupby('Column A') her benzersiz değer için bir satır grubu oluşturur Column A. Sonra ['Column C'].transform('sum') bu gruplardaki tüm satırlar için C değerlerini ekler.

Bu miktar D Sütununa kaydedilir ve daha sonra ilkini tutmak için kopyaları bırakabiliriz

Bu çözümde bazı varsayımlar var. Hepsini bir araya getirecek 12 a'daki değerler, birbirinin hemen arkasında olmasalar bile, istediğiniz şey olabilir veya olmayabilir.

2021-11-11 00:47:55

new_bee
1
df = df.set_index(df['Column A']).drop('Column A', axis=1)
df['Column D'] = df.groupby('Column A')['Column C'].sum()
df = df.drop_duplicates(subset=['Column B'])
2021-11-11 00:56:50

Diğer dillerde

Bu sayfa diğer dillerde

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