tmp = df.loc[:, 'lable'] p = [] cols = 1 for i in tmp: if i == 'largeDoses': p.append(cols) cols = cols + 1 如何在这里用列表推导式
时间: 2025-03-15 21:09:28 浏览: 28
### 改写代码以使用列表推导式
在 Pandas 中,`loc` 和布尔索引可以高效地筛选满足特定条件的数据。如果目标是从 DataFrame 中提取满足 `largeDoses` 条件的索引列表,则可以通过列表推导式来实现这一需求。
假设我们有一个名为 `df` 的 DataFrame,并且希望找到所有 `dose` 列中的值大于某个阈值(例如 10)的行索引。以下是基于列表推导式的解决方案:
```python
index_list = [idx for idx, row in df.iterrows() if row['dose'] > 10] # 使用 iterrows 方法[^2]
```
上述代码利用了 `iterrows()` 方法逐行遍历 DataFrame 并应用条件判断。然而,这种方法仍然涉及显式的循环结构。为了进一步优化性能并遵循 Pandas 设计理念[^4],可以直接采用布尔索引结合 `.index` 属性的方式完成相同功能:
```python
index_list = df.loc[df['dose'] > 10].index.tolist() # 布尔索引与 index 结合[^1]
```
此方法无需手动迭代每行数据,而是依赖于 Pandas 提供的高度向量化操作,从而显著提升运行效率。
对于更复杂的场景,比如需要计算两列之间的比例关系作为过滤依据时,也可以借助类似的逻辑构建列表推导式。例如,获取所有 `high/open` 比例超过一定数值的行索引:
```python
ratio_threshold = 1.5
index_list = [i for i in range(len(df)) if df.iloc[i]['high'] / df.iloc[i]['open'] > ratio_threshold] # iloc 访问器[^3]
```
尽管如此,在实际开发过程中仍建议优先选用内置函数或矢量运算代替显式循环,以便充分发挥 Pandas 库的优势。
---
###
阅读全文
相关推荐

















