Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧中使用apply和lambda时,是否有方法应用条件?_Python_Python 3.x_Pandas_Dataframe_Apply - Fatal编程技术网

Python 在数据帧中使用apply和lambda时,是否有方法应用条件?

Python 在数据帧中使用apply和lambda时,是否有方法应用条件?,python,python-3.x,pandas,dataframe,apply,Python,Python 3.x,Pandas,Dataframe,Apply,我有一个熊猫数据框,看起来像这样: ID Dyn 0 AA01 0.084, 0.049, 0.016, -0.003, 0, 0.025, 0.954, 1 1 BG54 0.216, 0.201, 0.174, 0.175, 0.179, 0.191, 0.200 我正在寻找一种通过Dyn列实现iter的方法,生成另一个只对大于截止值的数字求和的方法,即:0.150,将所有通过它的值

我有一个熊猫数据框,看起来像这样:

    ID                                               Dyn
0 AA01   0.084, 0.049, 0.016, -0.003, 0, 0.025, 0.954, 1
1 BG54   0.216, 0.201, 0.174, 0.175, 0.179, 0.191, 0.200
我正在寻找一种通过Dyn列实现iter的方法,生成另一个只对大于截止值的数字求和的方法,即:0.150,将所有通过它的值赋值为1。 这就是预期结果的样子:

    ID                                               Dyn Sum
0 AA01   0.084, 0.049, 0.016, -0.003, 0, 0.025, 0.954, 1   2
1 BG54   0.216, 0.201, 0.174, 0.175, 0.179, 0.191, 0.200   7
我想我可以使用apply,同时在所有行中使用它:

for index, rows in df.iterrows():
   df['Sum'] = df['Dyn'].apply(lambda x: x = 1 if int(x) > 0.150 ) 
但我不知道如何将条件(只有当它大于0.150时才求和)应用于“Dyn”中的所有值,以及如何将值1分配给它们。
所有的建议都被接受了。谢谢

下面是什么?您可以筛选出不符合该条件的记录,然后求和:

>>> x = pd.DataFrame({'ID': {0: 'A', 1: 'B'}, 'Dyn': {0: '1,2,3', 1: '2,3,4'}})
>>> x
  ID    Dyn
0  A  1,2,3
1  B  2,3,4
>>> y = x.set_index('ID').Dyn.str.split(',').explode().astype(int)
>>> y = y[y>=1.5]
>>> x.merge(y.groupby('ID').sum().reset_index().rename({'Dyn':'Sum'}, axis = 1))
  ID    Dyn  Sum
0  A  1,2,3    5
1  B  2,3,4    9

我相信这是可行的,但我有一个错误:“ValueError:invalid literal for int(),基数为10:“0.084”,也许我需要先转换这些值?啊,只需转换.astype(float)即可。我的模型只考虑整数。看看是否有效。谢谢你的回答。我理解它是如何工作的。我不知道为什么.sum()不起作用,它仍然返回分解后的所有列,并且该列只包含每个“Dyn”行的单独值。对我来说是有效的。检查列的命名。可能有空白。你能
df.columns
并将列复制到代码中吗?是的,应该可以。我不知道为什么没有。我得到的列是正确的(df.columns返回:Index(['ID','Dyn','Dyn_Sum'],dtype='object')),但我得到的是分解的df(22899行),而不是Sum(预期67行)。
#Create temp column to hold Dyn convereted into list
df=df.assign(sum=df['Dyn'].str.split(','))

#Explode DataFrame
df=df.explode('sum')
#Convert to float
df['sum']=df['sum'].astype(float)
#Filter out values greater that 0.015, groupby and sum
df[df['sum'].gt(0.150)].groupby(['ID','Dyn'])['sum'].sum().reset_index()