有没有办法在 DataFrame 中使用 apply 和 lambda 时应用条件?
Is there a way to apply a condition while using apply and lambda in a DataFrame?
我有一个 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,为所有传递给它的值分配一个值.
预期结果应如下所示:
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 )
但我不知道如何将条件应用于 'Dyn' 中的所有值(仅当它大于 0.150 时才求和)以及如何将值 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
#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()
我有一个 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,为所有传递给它的值分配一个值. 预期结果应如下所示:
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 )
但我不知道如何将条件应用于 'Dyn' 中的所有值(仅当它大于 0.150 时才求和)以及如何将值 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
#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()