Я думаю, что вы можете использовать Counter
и most_common
, но мой формат ввода немного отличается - это list
из tuples
:
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
Это не было легко, и я должен спросить another question.
Понадобится:
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
Ok спасибо за ваш ответ. Мой df - это то же самое, что: 'df = pd.DataFrame ({'a': [['(a, 1.0), (b, 6.0), (c, 10.0)']]})' – Zop
Phooo, it очень сложно. Основная проблема - это тот же разделитель ',' между 'tuples' и между' values' – jezrael
Теперь мы меняем формат: 'df = pd.DataFrame ({'a': [['(a, 1.0) :(b, 6.0) :(c, 10.0) ']]}) ' – Zop