我有一个包含 1,000 列和 3000 万个示例行的 pandas DataFrame。我需要在每一列上执行一些操作(比方说加法、乘法等)。如果操作后任何列中的某个值变为 0,那么我需要停止对剩余的列和行进一步应用操作。另外,我想知道它在哪一列和哪一行变成了 0。
我已经使用 iterrows 进行了一些检查,但由于数据量很大,因此存在性能问题。另外,iterrows 是否有任何替代方案可以申请?
ID PID PC TID
10 1005 8017 3
11 10335 5019 2
12 1000 8017 1
13 243 8870 1
14 4918 8305 3
15 9017 8305 3
按列应用操作:
- Col1 减 9。
- Col2 减去 1000。
- Col3 除以 100。
- Col4 减 1。
在第二列上应用后,第三个值为 0,然后整个过程应该停止并返回第二列第三行。
输出: 如果执行按列操作:
ID PID PC TID
1 5 8017 3
2 9335 5019 2
3 0 8017 1
4 243 8870 1
5 4918 8305 3
6 9017 8305 3
如果执行逐行操作:
ID PID PC TID
1 5 80.17 2
2 9335 50.19 1
3 0 8017 1
13 243 8870 1
14 4918 8305 3
15 9017 8305 3
最佳答案
考虑到行比列多得多,而且矢量化操作要快得多,我建议如下:
for c in df.columns:
res = <apply function on df[c]>
if (res != 0).all(): # No zero found
df[c] = res
continue
# Zero found - apply only up to it.
df[c] = res[(res != 0).astype(int).cumsum() == 0] # Apply up to first 0
break
关于python - 满足条件时停止应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50358598/