2017-11-15 12 views
1

数値の値がカンマ(、)で区切られたデータフレーム列があります。私はその列の各セルの値の合計を見つけて、新しい列を作成しようとしています。Pythonを使用してデータフレーム列のコンマで区切られたセルの値を集計します。

入力: DF:

 id Scores 
     1 10,12 
     2 11 
     3 1,2,3 

出力が必要:

 id Scores Sum 
     1 10,12 22 
     2 11  11 
     3 1,2,3 6 

コード:私は、カスタム関数を書いて試してみましたが、私はPythonで適用機能を利用することができるように

def sum_of_number(listx): 
    a=[] 
    n=0 
    if len(listx)==1: 
     a=listx 
     n=a 
    else: 
     a=str(listx).split(',') 
     for i in range(0,len(a)): 
      n=n+int(a[i]) 
    return n 

df['Sum']=df.Scores.apply(sum_of_number) 

しかし、私は意図した結果を得ることができません。


編集:ソリューション

df['Sum'] = df['Scores'].apply(lambda x: sum(map(float, x.split(',')))) 

を提供するためのDeepSpaceへ おかげで同じが

 id Scores Median 
     1 10,12 11 
     2 11  11 
     3 1,2,3 2 

答えて

0

あなたはsumを組み合わせることにより、はるかに簡単なコードを使用することができ、中央値取得に適用することができ、 mapint(またはfloat、必要に応じて):

import pandas as pd 

df = pd.DataFrame({'Scores': ['10,12', '11', '1,2,3']}) 
df['Sum'] = df['Scores'].apply(lambda x: sum(map(int, x.split(',')))) 
# or df['Sum'] = df['Scores'].apply(lambda x: sum(map(float, x.split(',')))) 
print(df) 

# Scores Sum 
# 0 10,12 22 
# 1 11  11 
# 2 1,2,3 6 

上記は値が文字列であることを前提としています。値が実際の整数のリストであれば、さらに簡単です。

import pandas as pd 

df = pd.DataFrame({'Scores': [[10, 12], [11], [1, 2, 3]]}) 
df['Sum'] = df['Scores'].apply(sum) 
print(df) 

#  Scores Sum 
# 0 [10, 12] 22 
# 1  [11] 11 
# 2 [1, 2, 3] 6 
+0

ありがとうございました。コードは上記の場合に対応しています。しかし、私の得点が小数点以下にあるときは、エラーが発生しています(id 1の場合は0.9,0.8、id 2の場合は0.2、id 3の場合は0.3,0.2,0.5)Error:ValueError:基数10の '0.9のint() ' – Sam

+0

@Samだから、 'int'の代わりに' float'を使用してください。 – DeepSpace

+0

ありがとうございました:)...平均、中央値を計算したいとします。 sumはグローバル関数なので、どのようにすればよいかお教えください。 – Sam

関連する問題