python - Python,熊猫根据停止条件查找每行的长度
问题描述
我有一个数据集,其中 -1 表示我需要停止阅读的点。例如,数据集如下所示:
0 1 2 3 4 5
0 58 68 58 59 -1 -1
1 59 69 59 -1 -1 -1
2 93 94 93 33 -1 -1
3 58 59 58 68 -1 -1
4 92 94 92 33 -1 -1
其中第 4 列的 -1 表示停止读取元素。
更准确地说,我想为所有行返回每行的长度(在出现 -1 之前存在多少元素)。
所以第一行的长度为4(4个元素直到-1)。第二行的长度为 3。第三行的长度为 4,依此类推。
为此,我认为我需要在 pandas 中获取每行出现第一个 -1 的索引的方法。
我如何在 pandas 中以一种很好的方式做这样的事情(所以要避免长 for 循环选项?)
我要提前感谢您的帮助。问候亚历克斯
解决方案
numpy.argmax
您可以将 DataFrame 值与 -1 进行比较,然后用于numpy.argmax
获取每行非零值的数量。
(df.values == -1).argmax(axis=1)
# array([4, 3, 4, 4, 4])
分配这个回来,
df['num_vals'] = (df.values == -1).argmax(axis=1))
df
0 1 2 3 4 5 num_vals
0 58 68 58 59 -1 -1 4
1 59 69 59 -1 -1 -1 3
2 93 94 93 33 -1 -1 4
3 58 59 58 68 -1 -1 4
4 92 94 92 33 -1 -1 4
这通过始终返回在每行中找到的第一个 -1 的列索引来工作,因此更通用。
.cumsum(axis=1)
+.max(axis=1)
df['num_vals'] = (df != -1).cumsum(axis=1).max(axis=1)
df
0 1 2 3 4 5 num_vals
0 58 68 58 59 -1 -1 4
1 59 69 59 -1 -1 -1 3
2 93 94 93 33 -1 -1 4
3 58 59 58 68 -1 -1 4
4 92 94 92 33 -1 -1 4
这假设您的 -1 值始终位于其各自行的末尾。
推荐阅读
- android - 文本大小 AppBar / NavBar 辅助功能
- java - 发送电子邮件后如何敬酒?
- spring - 选择带有弹簧数据的自引用表到新对象中
- react-native - 从导航标题返回屏幕时出错:未定义不是对象(评估“this.props.navigation.navigate”)
- python - Sympy 符号微分
- azure - PatchOrchestrationApplicationType 1.2.2 - FABRIC_E_FILE_NOT_FOUND:在商店中找不到应用程序清单文件“ApplicationManifest.xml”
- android - 与父底部对齐的视图被隐藏,同时在协调器布局中包含相对布局
- java - 无法将源从目标复制到包的目标
- c# - 剃刀生成器在剃刀视图中添加空注释行
- wpf - scichart3d几何对象选择是不可能的吗?