2017-02-09 19 views
2

Ich habe ein Problem mit einer Funktion in meinem DataFrame. Das ist mein Dataframe (nur auf die Funktion, die ich verwenden möchten):Pandas Split Funktionen Tupel

0  (a,1.0),(b,6.0),(c,10.0) 
1  (a,1.0),(b,6.0) 
2  (a,1.0),(x,6.0),(e,5) 

Ich möchte eine Funktion mit der Zeichenfolge, die das größere Gewicht schaffen. Beispiel (nach dem Skript) Ich würde eine neue Funktion erhalten:

0 c 
1 b 
2 x 

Können Sie mir helfen?

Antwort

0

Ich glaube, Sie Counter und most_common verwenden können, aber mein Format von Eingang ist ein bisschen anders - es list von tuples ist:

df = pd.DataFrame({'a':[[('a',1.0),('b',6.0),('c',10.0)], 
         [('a',1.0),('b',6.0) ], 
         [('a',1.0),('x',6.0),('e',5)]]}) 
print (df) 
           a 
0 [(a, 1.0), (b, 6.0), (c, 10.0)] 
1    [(a, 1.0), (b, 6.0)] 
2  [(a, 1.0), (x, 6.0), (e, 5)] 

print (df.a.apply(lambda x: Counter(dict(x)).most_common(1)[0][0])) 
0 c 
1 b 
2 x 
Name: a, dtype: object 

Es war nicht einfach, und ich habe another question zu fragen.

Sie benötigen:

import ast 

df = pd.DataFrame({'a':[['(a,1.0),(b,6.0),(c,10.0)']]}) 

print (df) 
          a 
0 [(a,1.0),(b,6.0),(c,10.0)] 

df.a = df.a.str[0].str.replace(r'\((\w+),', r"('\1',").apply(lambda x: ast.literal_eval(x)) 
print (df) 
           a 
0 ((a, 1.0), (b, 6.0), (c, 10.0)) 

print (df.a.apply(lambda x: Counter(dict(x)).most_common(1)[0][0])) 
0 c 
Name: a, dtype: object 
+0

Ok danke für deine Antwort. Mein df ist dasselbe wie: 'df = pd.DataFrame ({'a': [['(a, 1.0), (b, 6.0), (c, 10.0)']]})' – Zop

+0

Phooo, es ist sehr kompliziert. Hauptproblem ist das gleiche Trennzeichen ',' zwischen 'Tupel' und zwischen' Werten' – jezrael

+0

OK, jetzt ändern wir das Format: 'df = pd.DataFrame ({'a': [['(a, 1.0) :(b, 6.0) :(c, 10.0) ']]}) ' – Zop

Verwandte Themen