gpt4 book ai didi

python - 如果列的所有元素均为负数,则 pandas 切片列

转载 作者:行者123 更新时间:2023-11-30 23:16:16 26 4
gpt4 key购买 nike

我就是这样做的,但我觉得还可以更简单。

df = pd.DataFrame(data={'A':[1,1,1,1], 'B':[-1,-1,-1,-1], 'C':[-1,-1,-1,-1], 'D':[-1,-1,-1,-1], 'E':[1,1,1,1]})
print df

msk= []
for i,k in enumerate(df.columns.tolist()):
if (df.iloc[:,i]<0).all(0):
msk.append(k)

df[msk]
print df[msk]

最佳答案

使用np.all并传递axis=0:

In [14]:

df[df.columns[np.all(df<0, axis=0)]]
Out[14]:
B C D
0 -1 -1 -1
1 -1 -1 -1
2 -1 -1 -1
3 -1 -1 -1

时间

In [18]:

%%timeit
msk= []
for i,k in enumerate(df.columns.tolist()):
if (df.iloc[:,i]<0).all(0):
msk.append(k)

df[msk]
1000 loops, best of 3: 1.78 ms per loop
In [19]:

%timeit df[df.columns[np.all(df < 0, axis=0)]]

1000 loops, best of 3: 661 µs per loop

更新

@Aerofoil 的答案实际上是这里最慢的,它的扩展性可能比你的更好,但我怀疑它会比 numpy 方法更快

In [25]:

%timeit df[(df<0)].dropna(axis=1)
100 loops, best of 3: 2.11 ms per loop

进一步更新

如果我们比较 400,000 行 df 的性能,我们会看到以下结果:

你的方法:

10 loops, best of 3: 42.2 ms per loop

@Aerofoil的方法:

10 loops, best of 3: 124 ms per loop

使用np.all的numpy方法:

100 loops, best of 3: 9.47 ms per loop

因此我们看到 numpy 方法由于矢量化而具有更好的扩展性

关于python - 如果列的所有元素均为负数,则 pandas 切片列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27795972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com