假设我有以下pandas数据帧:
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)
我可以根据特定值进行子集化:
x = df[df['A'] == 3]
x
A B
2 3 3
Run Code Online (Sandbox Code Playgroud)
但是我如何根据值列表进行子集化? - 这样的事情:
list_of_values = [3,6]
y = df[df['A'] in list_of_values]
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.任何人都可以改进吗?
我有一个数据框df1,看起来像:
c k l
0 A 1 a
1 A 2 b
2 B 2 a
3 C 2 a
4 C 2 d
Run Code Online (Sandbox Code Playgroud)
另一个叫做df2:
c l
0 A b
1 C a
Run Code Online (Sandbox Code Playgroud)
我想过滤df1只保留不在的值df2.要过滤的值应为as (A,b)和(C,a)tuples.到目前为止,我尝试应用该isin方法:
d = df[~(df['l'].isin(dfc['l']) & df['c'].isin(dfc['c']))]
Run Code Online (Sandbox Code Playgroud)
除了在我看来太复杂,它返回:
c k l
2 B 2 a
4 C 2 d
Run Code Online (Sandbox Code Playgroud)
但我期待:
c k l
0 A 1 a
2 B 2 a
4 C 2 …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
我对Python/Pandas比较陌生,并且正在努力从pd.Dataframe中提取正确的数据.我实际拥有的是一个包含3列的Dataframe:
data =
Position Letter Value
1 a TRUE
2 f FALSE
3 c TRUE
4 d TRUE
5 k FALSE
Run Code Online (Sandbox Code Playgroud)
我想要做的是将所有TRUE行放入一个新的Dataframe中,这样答案就是:
answer =
Position Letter Value
1 a TRUE
3 c TRUE
4 d TRUE
Run Code Online (Sandbox Code Playgroud)
我知道您可以使用访问特定列
data['Value']
Run Code Online (Sandbox Code Playgroud)
但是如何提取所有TRUE行?
感谢您的帮助和建议,
亚历克斯
我的Pandas数据集中有两个字符串列
name1 name2
John Doe John Doe
AleX T Franz K
Run Code Online (Sandbox Code Playgroud)
我需要检查是否name1等于name2.我现在使用的天真方式是使用简单的面具
mask=df.name1==df.name2
但问题是可能存在错误标记的字符串(以不可预测的方式 - 数据太大),以防止发生精确匹配.
例如"John Doe"和"John Doe"不匹配.当然,我修剪,低调的琴弦,但其他可能性仍然存在.
一个想法是看是否name1包含在name2.但似乎我不能使用str.contains另一个变量作为参数.还有其他想法吗?
非常感谢!
编辑:使用isin给出非感性的结果.例
test = pd.DataFrame({'A': ["john doe", " john doe", 'John'], 'B': [' john doe', 'eddie murphy', 'batman']})
test
Out[6]:
A B
0 john doe john doe
1 john doe eddie murphy
2 John batman
test['A'].isin(test['B'])
Out[7]:
0 False
1 True
2 False
Name: A, dtype: bool
Run Code Online (Sandbox Code Playgroud) 我目前正在格式化来自两个不同数据集的数据.其中一个数据集反映了按小时计算人数的观察数,第二个是基于5分钟间隔生成的wifi日志的人数.
将这两个数据帧合并为一个之后,我遇到的问题是每小时("10:00:00")有原始数据集,但其他数据(每5分钟像"10:47:14")不包括此数据.
以下是合并数据框的外观:
room time con auth capacity % Count module size
0 B002 Mon Nov 02 10:32:06 23 23 90 NaN NaN NaN NaN`
1 B002 Mon Nov 02 10:37:10 25 25 90 NaN NaN NaN NaN`
12527 B002 Mon Nov 02 10:00:00 NaN NaN 90 50% 45.0 COMP30520 60`
12528 B002 Mon Nov 02 11:00:00 NaN NaN 90 0% 0.0 COMP30520 60`
Run Code Online (Sandbox Code Playgroud)
有没有办法让我通过数据框并从11:00:00找到有关"占用","占用","模块"和"大小"的所有信息,并将其写入所有的单元格中.同一天,小时在10:00:00到10:59:59之间?
这将允许我获得每一行的所有信息,然后允许我收集min(),max()并median()基于"日"和"小时".
要回答原始数据帧的注释,这里有:
第一个数据帧:
time room module size
0 Mon …Run Code Online (Sandbox Code Playgroud) 令人惊讶的是,我无法在pandas DataFrames中找到SQL的"NOT IN"运算符的类似物.
A = pd.DataFrame({'a':[6,8,3,9,5],
'b':['II','I','I','III','II']})
B = pd.DataFrame({'c':[1,2,3,4,5]})
Run Code Online (Sandbox Code Playgroud)
我想要所有的行A,它a不包含来自B's的值c.就像是:
A = A[ A.a not in B.c]
Run Code Online (Sandbox Code Playgroud) 我有一个熊猫DataFrame,其中包含值和其他信息。我希望能够提取仅属于一种信息的值。我不知道将要查询哪些值和多少个值。因此,有可能仅一次调用带有附加信息“ foo”的值,有时调用带有附加信息“ bar”和“ baz”的值,因此使用简化的DataFrame
import pandas as pd
df = pd.DataFrame(
[[1, 'foo'], [2, 'bar'], [3, 'baz']], columns=['value', 'id'])
Run Code Online (Sandbox Code Playgroud)
我试过了
result = df[df.id in ['foo', 'bar']]
Run Code Online (Sandbox Code Playgroud)
但是我只是得到一个ValueError:系列的真值是模棱两可的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。但是我无法使用any()函数给我结果...。
对于以下两个数据帧:
df1 = pd.DataFrame({'name': pd.Series(["A", "B", "C"]), 'value': pd.Series([1., 2., 3.])})
name value
0 A 1.0
1 B 2.0
2 C 3.0
df2 = pd.DataFrame({'name': pd.Series(["A", "C", "D"]), 'value': pd.Series([1., 3., 5.])})
name value
0 A 1.0
1 C 3.0
2 D 5.0
Run Code Online (Sandbox Code Playgroud)
我只想保留列中df2的值与name列中的值重叠的name行df1,即生成以下数据框:
name value
0 A 1.0
1 C 3.0
Run Code Online (Sandbox Code Playgroud)
我已经尝试了多种方法,但我是 python 和 pandas 的新手,不喜欢来自 R 的语法。为什么这行代码不起作用,什么会?
df2[df2["name"] in df1["name"]]
Run Code Online (Sandbox Code Playgroud)