在DataFrame中使用apply和lambda时是否有方法应用条件?



我有一个Pandas数据框架,看起来像这样:

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列,生成另一个只求和大于截止值的数字,即: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的值分配给它们。所有的建议都被接受。谢谢!

#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()

下面这些呢?您可以过滤掉不满足该条件的记录,然后求和:

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

相关内容

  • 没有找到相关文章

最新更新