对于像1_2_5
这样的给定字符串,我需要获取1+2+5 = 8
的值之和,然后指定它是否大于6
我有下面的代码很好用
import numpy as np
import pandas as pd
np.sum( list( map( float, "1_2_5".split("_"))))> 6
现在想象我有一个具有相同字符串的数据框
dict = {"State":["0_0_1","4_0_0","4_0_3"]}
dt = pd.DataFrame(data=dict)
我需要对列(State
)应用相同的逻辑。这是我的代码:
np.sum( list( map( float, dt["State"].apply(lambda x: x.split("_")))))> 6
但它抱怨:
TypeError: float() argument must be a string or a number, not 'list'
答案 0 :(得分:0)
我个人不会使用apply()
:
>>> [sum(map(float, s.split('_'))) for s in dt.State]
[1.0, 4.0, 7.0]
这将为每一行计算一个单独的总和。如果您需要总和:
>>> sum(sum(map(float, s.split('_'))) for s in dt.State)
12.0
与之比较,剩下的6作为练习供读者阅读。 :)
答案 1 :(得分:0)
这个可怕的单线飞机怎么样?
>>> df['State'].apply(lambda x: sum(float(i) for i in x.split('_')) > 6).tolist()
[False, False, True]
答案 2 :(得分:0)
这似乎是eval
和apply
组合的好例子
import numpy as np
import pandas as pd
dict = {"State":["0_0_1","4_0_0","4_0_3"]}
dt = pd.DataFrame(data=dict)
dt["State"].apply(lambda x: eval(x.replace("_", "+"))>6)
并输出:
0 False
1 False
2 True
Name: State, dtype: bool
[Program finished]