相关疑难解决方法(0)

使用值列表从pandas数据框中选择行

可能重复:
如何通过"within"/"in"过滤pandas的数据帧行?

假设我有以下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)

python dataframe pandas

603
推荐指数
5
解决办法
56万
查看次数

如何为Pandas数据帧实现'in'和'not in'

我怎样才能实现SQL的的等价物INNOT 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.任何人都可以改进吗?

python sql-function dataframe pandas

353
推荐指数
9
解决办法
34万
查看次数

pandas - 按行元素按另一个数据帧过滤数据帧

我有一个数据框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)

python pandas

33
推荐指数
3
解决办法
3万
查看次数

我可以将pandas.dataframe.isin()与数字容差参数一起使用吗?

我事先审查了以下帖子.有没有办法使用具有近似因子或容差值的DataFrame.isin()?还是有其他方法可以吗?

如果列中的值位于设置的值列表中,则过滤数据帧行

使用值列表从pandas数据帧中选择行

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

8
推荐指数
1
解决办法
2237
查看次数

从pandas Dataframe中提取特定列中具有特定值的所有行

我对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行?

感谢您的帮助和建议,

亚历克斯

python dataframe pandas

7
推荐指数
1
解决办法
1万
查看次数

如何比较熊猫中的两个字符串变量?

我的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)

python string pandas

5
推荐指数
2
解决办法
2万
查看次数

大熊猫根据另一个细胞改变细胞值

我目前正在格式化来自两个不同数据集的数据.其中一个数据集反映了按小时计算人数的观察数,第二个是基于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)

python dataframe python-3.x pandas

5
推荐指数
1
解决办法
1541
查看次数

Pandas类似于SQL的"NOT IN"运算符

令人惊讶的是,我无法在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)

python pandas

5
推荐指数
1
解决办法
1623
查看次数

筛选Pandas DataFrame中列表中的元素

我有一个熊猫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()函数给我结果...。

python pandas

4
推荐指数
1
解决办法
6888
查看次数

通过与另一个数据帧重叠来对熊猫数据帧进行子集

对于以下两个数据帧:

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列中的值重叠的namedf1,即生成以下数据框:

     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)

python pandas

4
推荐指数
1
解决办法
5451
查看次数