python - Pandas 适用,但仅适用于满足条件的行

标签 python pandas dataframe apply

我想使用 Pandas df.apply 但仅限于某些行

作为一个例子,我想做这样的事情,但我的实际问题有点复杂:

import pandas as pd
import math
z = pd.DataFrame({'a':[4.0,5.0,6.0,7.0,8.0],'b':[6.0,0,5.0,0,1.0]})
z.where(z['b'] != 0, z['a'] / z['b'].apply(lambda l: math.log(l)), 0)

在这个例子中我想要的是'a'中的值除以每行'b'中的值的对数,对于'b'为0的行,我只想返回0。

最佳答案

其他答案非常好,但我想我会添加另一种在某些情况下可以更快的方法——使用广播和屏蔽来达到相同的结果:

import numpy as np

mask = (z['b'] != 0)
z_valid = z[mask]

z['c'] = 0
z.loc[mask, 'c'] = z_valid['a'] / np.log(z_valid['b'])

特别是对于非常大的数据帧,这种方法通常会比基于 apply() 的解决方案更快。

关于python - Pandas 适用,但仅适用于满足条件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769860/

相关文章:

python - 如何计算 Pandas 数据框中连续行之间的差异?

python - Pandas :计算有条件的连续行

python - 对 pandas 数据透视中时间序列中某一天的所有值求和

python - Pandas 键错误 : value not in index

python - 合并两个 numpy 数组,一个作为键,另一个作为值

python:自动区分list/tuple/array和int/float

python - 在数据框中查找特定元素的列名

python - 如何将 iter() 应用于分页 api?

python - 比较列表的列表的列表

python - 合并两个数据框并保留唯一列