Pandas Split以元组为特色

时间:2017-02-09 10:16:29

标签: python pandas split

我的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

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以使用Countermost_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