我的DataFrame中的功能有问题。这是我的DataFrame(只是我想要使用的功能):
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)
我想创建一个具有更大权重的字符串的功能。 示例(在脚本之后)我想要一个新功能:
0 c
1 b
2 x
你能帮助我吗?
答案 0 :(得分:0)
我认为您可以使用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