python - 如何根据几列中的指定条件选择数据框中的行?
问题描述
我是 pandas 的新手,并试图获取一些匹配两列条件的行
这是我的代码:
import pandas as pd
df = pd.read_csv('sp500.csv')
full_list = []
symbol = df['Symbol']
full_list.append(symbol)
name = df['Name']
full_list.append(name)
sector = df['Sector']
full_list.append(sector)
price = df['Price']
full_list.append(price)
book_value = df['Book Value']
full_list.append(book_value)
low = df['52 week low']
full_list.append(low)
high = df['52 week high']
full_list.append(high)
df = pd.DataFrame(full_list)
df = df.T
print(df.loc[df['Sector'].isin(['Financials','Energy']) and (df['52 week low'] < 80)])
我在文档中找不到正确的命令,问题出在最后一行代码中。请帮助我了解它是如何工作的
解决方案
你很接近。您需要使用按位运算符并注意考虑不直观的运算符优先级:
df.loc[
df['Sector'].isin(['Financials','Energy']) & # not "and"
(df['52 week low'] < 80) # these parenthesis are crucial
]
旁注,没有看到您正在使用的文本文件,我不禁认为您最好直接选择列而不是重建数据框:
import pandas as pd
cols_to_keep = ['Symbol', 'Name', 'Sector', 'Price', 'Book Value', '52 week low', '52 week high']
rows_to_keep = lambda df: df['Sector'].isin(['Financials','Energy']) & (df['52 week low'] < 80)
df = (
pd.read_csv('sp500.csv')
.loc[row_to_keep, cols_to_keep]
)
推荐阅读
- python - 使用 Geopandas 将 NYC shapefile 子集到曼哈顿
- angular - Formio 角度停止加载按钮并显示错误
- hibernate - JpaRepository 本机查询未检测到参数
- c - 使用结构更新指针进行重新分配时出现问题
- typescript - Vue、TypeScript 无法调用组件方法
- powershell - 如何在powershell中的-Newname中包含变量
- mysql - 使用 MySQL 的 C# 中的 IF & Else 条件
- scatter-plot - 两张图片之间的散点图 Google Earth Engine
- netbeans - 为 Ubuntu 下载 Apache Netbeans
- jekyll - Zeit Now CLI 没有显示这样的文件或目录