Pandas数据帧过滤

2024-05-05 19:38:02 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个包含四列的DataFrame,每个列都有一个阈值,我想对照这个阈值比较DataFrame的值。在

我只想最小值的数据帧或阈值。在

例如:

df = pd.DataFrame(np.random.randn(100,4), columns=list('ABCD'))

>>> df.head()
          A         B         C         D
0 -2.060410 -1.390896 -0.595792 -0.374427
1  0.660580  0.726795 -1.326431 -1.488186
2 -0.955792 -1.852701 -0.895178 -1.353669
3 -1.002576 -0.321210  1.711597 -0.063274
4  1.217197  0.202063 -1.407561  0.940371

thresholds = pd.Series({'A': 1, 'B': 1.1, 'C': 1.2, 'D': 1.3})

该溶液有效(过滤了A4和C3),但必须有一种更简单的方法:

^{pr2}$

理想情况下,我希望使用.loc进行适当的筛选,但我还没有找到答案。我正在使用Pandas 0.14.1(无法升级)。在

回复以下是我对备选方案的初步提案的定时测试:

%%timeit
df.lt(thresholds).multiply(df) + df.gt(thresholds).multiply(thresholds)
1000 loops, best of 3: 990 µs per loop

%%timeit
np.minimum(df, thresholds)  # <--- Simple, fast, and returns DataFrame!
10000 loops, best of 3: 110 µs per loop

%%timeit
df[df < thresholds].fillna(thresholds, inplace=True)
1000 loops, best of 3: 1.36 ms per loop

Tags: of数据loopdataframedfnp阈值random
2条回答

这相当快(并返回一个数据帧):

np.minimum( df, [1.0,1.1,1.2,1.3] )

一个令人愉快的惊喜,纽比是如此顺从,没有任何重塑或明确的转换。。。在

怎么样:

df[df < thresholds].fillna(thresholds, inplace=True)

showing result

相关问题 更多 >