2017-10-06 3 views
1

異なるタイプの複数の行をpandasに統合することを検討しています。私は.groupby()パラメータを持っています:['ID']。列['A']は、['ID']でグループ化した場合に値を繰り返したり、各行のデータが異なります。列['B']は、単に.sum()を介して集計する必要があります。新しいデータフレームに行のグループ化と列集計ルールの定義

1に最適な方法は何
input_df 

ID  A  B 
140-1 Apple  3.2 
140-1 Pear  5.0 
143-2 Plum  1.2 
143-2 Plum  2.0 

)基['ID']によって、['A'] 2)表示値グルーピング後に繰り返されていない場合、['A']の最初の値をグループ化した後に繰り返した場合、3)合計カラム['B']

output_df 

ID  A  B 
140-1 Apple  8.2 
143-2 Plum  3.2 

答えて

1

あなたはそれが他のデータフレーム上で動作するのと同じよう

df.groupby('ID').agg({'A': lambda x: x.unique()[0], 'B': 'sum'}).reset_index() 

    ID  A  B 
0 140-1 Apple 8.2 
1 143-2 Plum 3.2 
+0

あなたのコードが見え試すことができます。何らかの理由で、私は 'TypeError:'シリーズのオブジェクトは変更可能ですので、実際の作業データフレームではハッシュできません。 – ParalysisByAnalysis

+0

代わりにこれを試すことができますか? reset_index() – Vaishali

+0

私はそれを理解しました...私が列を呼び出す方法間違っていたご協力いただきありがとうございます! – ParalysisByAnalysis

1

試してみてください。

input_df.groupby('ID').apply(lambda f: pd.DataFrame({'A': f.A.head(1), 'B': f.B.sum()})).reset_index(level=0) 


#  ID  A B 
# 0 140-1 Apple 8.2 
# 2 143-2 Plum 3.2 
関連する問題