【问题标题】:How to filter out rows from multiple data frames that are inside a dictionary in python如何从python字典中的多个数据帧中过滤掉行
【发布时间】:2018-02-24 13:42:54
【问题描述】:

我有一个dictionary,其中包含许多dataframes

样本数据:

dataframe1 = pd.DataFrame({"variable1":["a","a","b"]})
dataframe2 = pd.DataFrame({"variable1":["b","a","b"]})
dictionary = dict(zip(["dataframe1","dataframe2"],[dataframe1,dataframe2]))

我想做的是创建一个新的dictionary,它将包含dataframes,但它将排除每个数据帧中variable1=="a"的行

lists 等效的R 命令将是

dictionary_new <- lapply(dictionary ,function(x){x[!variable1=="a",]})

我怎样才能把它翻译成Python

【问题讨论】:

  • @Bharathshetty 对我来说它有效。我正在使用python 3.x

标签: python python-3.x pandas dictionary


【解决方案1】:

将字典理解与queryboolean indexing 一起使用。对于排除a 需要过滤所有不是a 的值。

dictionary = {k:v.query('variable1!="a"') for k, v  in dictionary.items()}

或者:

dictionary = {k:v[v.variable1!="a"] for k, v  in dictionary.items()}
print (dictionary)


{'dataframe1':   variable1
2         b, 'dataframe2':   variable1
0         b
2         b}

【讨论】:

  • 像魅力一样工作。谢谢 !对于我的信息,您如何扩展它以添加多个条件?所以例如variable2!="b" ?
  • 当然,使用v[(v.variable1!="a") &amp; (variable2!="b")]v.query('variable1!="a" &amp; variable2!="b"')
【解决方案2】:

你也可以使用:

dictionary = {k:v.loc[v.variable1!="a",:] for k, v  in dictionary.items()}

看来@jezrael 的第二个建议是最快的:

In [94]: timeit {k:v.query('variable1!="a"') for k, v  in dictionary.items()}
100 loops, best of 3: 1.83 ms per loop

In [95]: timeit {k:v[v.variable1!="a"] for k, v  in dictionary.items()}
1000 loops, best of 3: 533 µs per loop

In [96]: timeit {k:v.loc[v.variable1!="a",:] for k, v  in dictionary.items()}
1000 loops, best of 3: 593 µs per loop

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多