【发布时间】:2018-05-18 02:47:58
【问题描述】:
我有一个包含 1000 列和 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
【问题讨论】:
-
当然。我将编辑问题。
-
还有其他操作,比如字符串替换。空字符串和浮点、日期值。这些检查也会因列的数据类型而异。
-
我现在已经编辑了这个问题。 @chrisz
-
@anishtain4 考虑到运行时间,我看到
itertuples比apply操作有更多的运行时间,并且比iterrows更好。如果满足任何(行)== 0 条件,我可以很容易地用 iterrows 做到这一点。但是,我的观点是如何优化运行时间。 -
@YOLO 当然,我会对问题本身进行编辑。
标签: python python-3.x pandas dataframe