2017-01-17 23 views
5

İki satırlı bir veri çerçevem ​​var ve iki satırı bir satırda birleştirmek istiyorum. şöyle df görünüyor: İki ayrı dataframes oluşturmak ve başarılı olamadı df.merge (df2) ile birleştirin çalıştıkBir veri çerçevesi pandasında iki satır nasıl birleştirilir?

   PC   Rating CY Rating PY HT 
0    DE101   NaN   AA  GV 
0    DE101   AA+   NaN  GV 

. Sonuç aşağıdaki

Herhangi bir fikir olmalıdır? Şimdiden teşekkürler Olası bir çözüm olabilir mi?

DÜZENLEME:

Bu yukarıdaki örnekte için çalışır
df.head(1).combine_first(df.tail(1)) 

. Bununla birlikte, sayısal değerler içeren sütunlar için, bu yaklaşım istenen çıktıyı vermez, örn.

   PC   Rating CY Rating PY HT MV1 MV2 
0    DE101   AA+   AA  GV 10  20 

yukarıdaki formül son iki sütunlarındaki değerleri Özetle, ancak dataframe ilk satırda değerleri alır:

   PC   Rating CY Rating PY HT MV1 MV2 
0    DE101   NaN   AA  GV 0  20 
0    DE101   AA+   NaN  GV 10 0 

için çıkış olmalıdır.

   PC   Rating CY Rating PY HT MV1 MV2 
0    DE101   AA+   AA  GV 0  20 

Bu sorun nasıl düzeltilebilir?

cevap

4

dokunulmadan diğer sonlu değerleri var tutarken ilk yarısında boş değerler diğer yarısında sonlu değerlerle değiştirilir olacağını DF 2 içine parçaları ayırdıktan sonra DF.combine_first() yöntemin kullanımı yapabilirsiniz:

df.head(1).combine_first(df.tail(1)) 
# Practically this is same as → df.head(1).fillna(df.tail(1)) 

enter image description here


Örtmek çeşitli opera performans sonra kurucu dtype sütunlar ve var bunları bölümleme, karışık veri türü sütun vardır Üzerindeki zincirler onları zincirleyerek yapılabilir.

obj_df = df.select_dtypes(include=[np.object]) 
num_df = df.select_dtypes(exclude=[np.object]) 

obj_df.head(1).combine_first(obj_df.tail(1)).join(num_df.head(1).add(num_df.tail(1))) 

enter image description here

+0

Teşekkür max kullanabilirsiniz, bu yukarıdaki örnekte için çalışır. Ancak, sayısal değerlere sahip ek sütunlar varsa, satırlar düzgün bir şekilde birleştirilemez, bkz. Gönderimimin düzenlenmesi – Carmen

+0

Yazımı güncelledim. Veri tablonuzda sayısal değerlerin varlığından bahsetmediğiniz için, üstteki satırı, herhangi bir boş değer bulunması durumunda, en alttaki satırı güncellemek istediniz. –

+1

Çok teşekkürler! Başka bir yol da NaN tarafından son iki sütundaki 0 ​​değerinin değiştirilmesi ve ardından önerdiğiniz ilk forumun uygulanmasıdır. – Carmen

1

Sen gibi devrik ile

In [2103]: df.max().to_frame().T 
Out[2103]: 
     PC Rating CY Rating PY HT MV1 MV2 
0 DE101  AA+  AA GV 10 20 
İlgili konular