python - 在 Pandas 中矢量化 df.apply() 操作
问题描述
我有一个 (493,20) 熊猫数据框,并且想为每一行计算一个条件 np.nanmean() 。条件是行中的每个值都需要高于某个阈值并低于另一个阈值。这是我当前的设置:
filt_avg_data= np.nanmean(data_tsl.apply(func= lambda x: x[(x < maxval*np.median(x)) & (x > minval*np.median(x))], axis= 1),axis=1)
其中 maxval:10,minval:0.1 和 data_tsl.shape= (493,20)。这工作正常。
但是,我想对这个操作进行矢量化——我不想使用df.apply()函数。我试过了
data_tsl>np.median(data_tsl,axis=1)
创建一个值掩码,我可以对其执行 np.nanmean() 操作,但似乎我无法让每一行data_tsl
对应于其各自的中值。这是弹出的错误:ValueError: operands could not be broadcast together with shapes (493,2) (493,)
我怎样才能向量化这个操作?与此类似的几个问题实际上并没有要求对问题进行矢量化 - 而只是让 .apply() 操作工作。
解决方案
如果您有NaNs
输入数据,我认为您想使用从中位数计算中np.nanmedian
忽略。NaNs
随之而来的是,我们可以使用组合掩码的上限和下限阈值来设置无效的阈值NaNs
,最后使用np.nanmean
-
a = data_tsl.values # use data_tsl.values.copy() to avoid editing input df
med = np.nanmedian(a,axis=1)
U = maxval*med
L = minval*med
a[(a >= U[:,None]) | (a <= L[:,None])] = np.nan
out = np.nanmean(a,axis=1)
推荐阅读
- python - Python selenium:遇到 StaleElementReferenceException
- javascript - 无法使用 jquery 选择更改的图像 src
- ios - 尝试从 API 加载描述时我错过了什么?
- python - 由熊猫数据框创建的图表的两条线之间的不同颜色阴影
- pdf - itextpdf重叠长字符串
- python - 在 Python 中引发异常类
- javascript - 未处理的承诺拒绝:错误:地图容器已初始化
- python - 如何使用 SQL Alchemy 在 SQL Server 中创建图形节点表?
- python - 使用 BeautifulSoup 附加表,使其工作?
- flutter - 数量增加减少显示计数器字段