2017-01-17 17 views
5

2行のデータフレームがあり、2行を1行にマージしたいと思います。次のように DFはルックス:データフレームの2つの行をマージする方法パンダ

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

私は2つの別々のデータフレームを作成し、成功せずdf.merge(DF2)でそれらを組み合わせることを試みています。結果は次のようになります

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

アイデアをお持ちですか?事前に感謝します df.updateは可能な解決策ですか?

EDIT:

df.head(1).combine_first(df.tail(1)) 

これは、上記の例のために動作します。しかしながら、数値を含む列の場合、このアプローチは所望の出力をもたらさない。

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

の出力は次のようになります。

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

上記式は、最後の2列の値を合計するが、データフレームの最初の行の値をとるありません。

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

どのようにこの問題を修正できますか?

答えて

4

それがそのまま他の有限値です保ちながら、あなたは前半にnull値が他の半分に有限の値に置き換えられるDF 2に部品を分離した後DF.combine_first()方法を利用することができます。

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

enter image description here


Incaseの混合データ型の列は、それが構成dtype列情報にそれらを分割した後、様々なオペラを行う、ありますそれらを連鎖させることによって実現可能であろう。

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

感謝をmaxを使用することができ、これは上記の例のために動作します。ただし、数値の列がある場合は、行を正しく組み合わせることはできません。投稿の編集 – Carmen

+0

私の投稿を更新しました。データフレームに数値の存在を記述していないので、nullが見つかった場合は一番上の行を一番下の行に更新したいと思っていました。 –

+1

ありがとう!別の方法は、最後の2つのカラムの0の値をNaNで置き換えて、あなたが提案した最初のforumlaを適用することです – Carmen

1

あなたが好きな転置で

In [2103]: df.max().to_frame().T 
Out[2103]: 
     PC Rating CY Rating PY HT MV1 MV2 
0 DE101  AA+  AA GV 10 20 
関連する問題