如何根据pandas中某些列中的值从DataFrame中选择行?
在SQL中我会使用:
SELECT *
FROM table
WHERE colume_name = some_value
Run Code Online (Sandbox Code Playgroud)
我试着看看熊猫文档,但没有立即找到答案.
我有一个Python pandas DataFrame rpt:
rpt
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 47518 entries, ('000002', '20120331') to ('603366', '20091231')
Data columns:
STK_ID 47518 non-null values
STK_Name 47518 non-null values
RPT_Date 47518 non-null values
sales 47518 non-null values
Run Code Online (Sandbox Code Playgroud)
我可以过滤库存ID '600809'如下的行:rpt[rpt['STK_ID'] == '600809']
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 25 entries, ('600809', '20120331') to ('600809', '20060331')
Data columns:
STK_ID 25 non-null values
STK_Name 25 non-null values
RPT_Date 25 non-null values
sales 25 non-null values
Run Code Online (Sandbox Code Playgroud)
我想把一些股票的所有行放在一起,例如['600809','600141','600329'].这意味着我想要这样的语法:
stk_list = ['600809','600141','600329']
rst = rpt[rpt['STK_ID'] in stk_list] # …Run Code Online (Sandbox Code Playgroud) 我怎样才能实现SQL的的等价物IN和NOT IN?
我有一个包含所需值的列表.这是场景:
df = pd.DataFrame({'countries':['US','UK','Germany','China']})
countries = ['UK','China']
# pseudo-code:
df[df['countries'] not in countries]
Run Code Online (Sandbox Code Playgroud)
我目前的做法如下:
df = pd.DataFrame({'countries':['US','UK','Germany','China']})
countries = pd.DataFrame({'countries':['UK','China'], 'matched':True})
# IN
df.merge(countries,how='inner',on='countries')
# NOT IN
not_in = df.merge(countries,how='left',on='countries')
not_in = not_in[pd.isnull(not_in['matched'])]
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个可怕的kludge.任何人都可以改进吗?
给出Pandas DataFrame中的数据,如下所示:
Name Amount
---------------
Alice 100
Bob 50
Charlie 200
Alice 30
Charlie 10
Run Code Online (Sandbox Code Playgroud)
我想选择Name集合中几个值之一的所有行{Alice, Bob}
Name Amount
---------------
Alice 100
Bob 50
Alice 30
Run Code Online (Sandbox Code Playgroud)
在熊猫中这样做的有效方法是什么?
我看到的选项
选择并合并许多语句,如下所示
merge(df[df.name = specific_name] for specific_name in names) # something like this
Run Code Online (Sandbox Code Playgroud)执行某种连接
这里的表现权衡是什么?何时一种解决方案比其他方案更好?我错过了哪些解决方案?
虽然上面的示例使用字符串,但我的实际作业在数百万行上使用10-100个整数的匹配,因此快速的NumPy操作可能是相关的.
看起来很难看:
df_cut = df_new[
(
(df_new['l_ext']==31) |
(df_new['l_ext']==22) |
(df_new['l_ext']==30) |
(df_new['l_ext']==25) |
(df_new['l_ext']==64)
)
]
Run Code Online (Sandbox Code Playgroud)
不起作用:
df_cut = df_new[(df_new['l_ext'] in [31, 22, 30, 25, 64])]
Run Code Online (Sandbox Code Playgroud)
是否有上述"问题"的优雅和有效解决方案?
Q类似于: 使用值列表从pandas数据帧中选择行
如果两列中的任何一个值都在列表中,我想要数据帧.返回两列(合并#1和#4的结果.
import numpy as np
from pandas import *
d = {'one' : [1., 2., 3., 4] ,'two' : [5., 6., 7., 8.],'three' : [9., 16., 17., 18.]}
df = DataFrame(d)
print df
checkList = [1,7]
print df[df.one == 1 ]#1
print df[df.one == 7 ]#2
print df[df.two == 1 ]#3
print df[df.two == 7 ]#4
#print df[df.one == 1 or df.two ==7]
print df[df.one.isin(checkList)]
Run Code Online (Sandbox Code Playgroud) 我想用来query()过滤 panda 数据框中出现在给定列表中的行。与这个问题类似,但我真的更喜欢使用query()
import pandas as pd
df = pd.DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})
mylist =[5,3]
Run Code Online (Sandbox Code Playgroud)
我试过:
df.query('A.isin(mylist)')
Run Code Online (Sandbox Code Playgroud) 我事先审查了以下帖子.有没有办法使用具有近似因子或容差值的DataFrame.isin()?还是有其他方法可以吗?
EX)
df = DataFrame({'A' : [5,6,3.3,4], 'B' : [1,2,3.2, 5]})
In : df
Out:
A B
0 5 1
1 6 2
2 3.3 3.2
3 4 5
df[df['A'].isin([3, 6], tol=.5)]
In : df
Out:
A B
1 6 2
2 3.3 3.2
Run Code Online (Sandbox Code Playgroud) python comparison floating-accuracy comparison-operators pandas
对熊猫来说很新鲜.
如果存在具有特定列值的行,是否有办法检查给定的pandas数据帧.假设我有一个"名称"列,我需要检查某个名称是否存在.
一旦我这样做,我将需要进行类似的查询,但一次只有一堆值.我读到有'isin',但我不确定如何使用它.因此,我需要进行一个查询,以便获得所有具有"Name"列的行,这些行与大量名称中的任何值匹配.
该问题最初是在此处作为评论提出的,但由于该问题被标记为重复,因此无法获得正确的答案。
对于给定的pandas.DataFrame,让我们说
df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})
df
A B
0 5 1
1 6 2
2 3 3
3 4 5
Run Code Online (Sandbox Code Playgroud)
我们如何基于列中的值从列表中选择行('A'例如)
例如
# from
list_of_values = [3,4,6]
# we would like, as a result
# A B
# 2 3 3
# 3 4 5
# 1 6 2
Run Code Online (Sandbox Code Playgroud)
使用此处isin提到的方法不能令人满意,因为它不能保持输入值列表的顺序。'A'
如何实现上述目标?
我有以下数据框:
Rec Channel Value1 Value2
Pre 10 20
Pre 35 42
Event A 23 39
FF 50 75
Post A 79 11
Post B 88 69
Run Code Online (Sandbox Code Playgroud)
我正在尝试确定此 Pandas Dataframe 的适当语法,了解如何为“通道”列等于 A 或 B 的所有实例建立索引。找到所有实例后,我想将它们打印出来。此外,我希望能够在脚本中调用每个索引以进行进一步的应用。
我希望显示为:
Rec Channel Value1 Value2
Event A 23 39
Post A 79 11
Post B 88 69
Run Code Online (Sandbox Code Playgroud)
然后我想要一个“for 循环”,它会遍历并分别打印出每个索引实例,以便很容易识别并单独调用它们,以便在脚本中进一步使用。有人可以建议吗?
我有一个数据框,其中有一行名为“Hybridization REF”。我想进行过滤,以便只获取与列表中的项目之一具有相同标签的项目的数据。
基本上,我想做以下事情:
dataframe[dataframe["Hybridization REF'].apply(lambda: x in list)]
Run Code Online (Sandbox Code Playgroud)
但该语法不正确。
我想从我的CSV文件中选择数据.
虽然我可以在哪个列中获取数据
"House" == 1 (any single number)
Run Code Online (Sandbox Code Playgroud)
如下,我不知道如何获取数据
"House" in [1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 17, 18, 20, 21, 23, 26, 28, 30, 34, 46, 57, 58, 61, 86, 89, 102, 121, 156].
Run Code Online (Sandbox Code Playgroud)
df = pd.read_csv('../../data/training_dataset_500.csv')
df[df['House']==1]
Run Code Online (Sandbox Code Playgroud)
pandas ×13
python ×13
dataframe ×7
numpy ×2
comparison ×1
data-science ×1
indexing ×1
select ×1
sql-function ×1