2017-08-24 19 views
1

私は、次のコードを使用すると、次のデータフレームでパンダGROUPBY和を連結番号

print(self.df.groupby(by=[2])[3].agg(['sum'])) 

を:

  0 1  2  3  4  5  6  7 
0   15 LCU Test 1 308.02 170703 ALCU 4868 MS10 
1   16 LCU Test 2 127.37 170703 ALCU 4868 MS10 

sum関数が正常に完了していないため、値の列( col 3)は、操作を可能にする個々の値の整合性を維持する代わりに、値の連結ストリング(308.02127.37)を戻します。

+1

はあなたが言及した動作を再現することはできません。さらに、コードを使用してエラーが発生する – Quickbeam2k1

+1

カラム3のように見えますが、浮動小数点の代わりに文字列を使用しています。キャストしようとしました – Deb

+0

groupbyを使用するためにデータフレームの行を追加すると、 。 – Dark

答えて

3

3番目の列が文字列であるようです。 dtype=strを使用してデータフレームにロードしましたか?

さらに、列をハードコードしないでください。あなたはキャストしてsumを適用するために.astypeまたはpd.to_numericを使用することができます。

self.df.groupby(self.df.columns[2])[self.df.columns[3]]\ 
     .agg(lambda x: pd.to_numeric(x, errors='coerce').sum()) 

それとも

self.df.groupby(self.df.columns[2])[self.df.columns[3]]\ 
     .agg(lambda x: x.astype(float).sum()) 
+1

ありがとうございます。私はこれを別の方法で行いましたが、各オプションを試して最も効果的なものを見てみましょう。問題は列が数値ではないことでした。 – RGETLB