2017-11-15 4 views
1

Ich habe eine Datenrahmenspalte mit numerischen Werten getrennt durch Kommas (,). Ich versuche, die Summe der Werte in jeder Zelle dieser Spalte zu finden und eine neue Spalte zu erstellen.Summiere Werte in einer Zelle, getrennt durch Komma in einer Datenrahmenspalte mit Python

Input: df:

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

Ausgang erforderlich:

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

Code: Ich habe versucht, eine benutzerdefinierte Funktion zu schreiben, so dass ich Verwendung anwenden Funktion in Python machen

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) 

Aber ich bin nicht in der Lage, das gewünschte Ergebnis zu erhalten.


Edit: Dank Deepspace für die Bereitstellung der Lösung

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

Kann die gleiche mittlere

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

Antwort

0

Sie einen viel einfacheren Code sum durch die Kombination verwenden können, um zu bekommen angewendet werden, map und int (oder float, basierend auf Ihren Bedürfnissen):

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 

Das obige nimmt an, dass die Werte Strings sind. Wenn die Werte tatsächliche Liste der ganzen Zahlen sind, ist es noch einfacher:

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

Danke der Code funktioniert für den obigen Fall. Aber wenn meine Scores in Dezimalzahlen sind, wird ein Fehler geworfen (sagen wir 0,9,0,8 für ID 1; 0,2 für ID 2 und 0,3,0,2,0,5 für ID 3) Fehler: ValueError: ungültiges Literal für int() mit Basis 10: '0.9 ' – Sam

+0

@Sam so verwenden Sie 'float' anstelle von' int' – DeepSpace

+0

Vielen Dank, es half:) ... Angenommen, ich möchte Mittelwert, Median berechnen. Können Sie vorschlagen, wie es getan werden kann, da Summe eine globale Funktion ist – Sam

Verwandte Themen