【问题标题】:Using list comprehension and groupby to subset a Pandas dataframe使用列表理解和 groupby 对 Pandas 数据框进行子集化
【发布时间】:2022-12-17 22:33:29
【问题描述】:

我很难将列表理解和 groupby 函数应用于 Pandas 数据框的子集。

我的数据框有一列“patid”,其中包含患者 ID 列表,例如。 25001。患者 (25001) 将有多个行。因此,对于该示例,具有 10,000 行的数据框可能仅包含 10 名患者的数据。我想获取列表 patidList 并返回一个数据框,其中仅包含“patid”列中的值与数据框的 patid 列中的 patids 之一匹配的行。

我已经使用这段代码对数据帧进行了子集化,我知道这在速度方面有点瓶颈。出于练习目的,我已显着减小了此示例中列表和数据框的大小:

class TestClass():

    def __init__(self):
        dictExample = {
            "patid" : ["25001", "25001", "25001", "999", "999"],
            "interesting_stuff" : ["a","b","c","d","e"]
        }
        self.ioDF = pd.DataFrame(dictExample)

    def someMethod(self):
        patidList = ["25001"]
        reducedDF = self.ioDF.loc[self.ioDF['patid'].isin(patidList)]

testClass = TestClass()
testClass.someMethod()

但是,有人向我建议,如果我使用列表理解和 groupby 函数,我可能会看到速度加快。我不知道该怎么做。请注意:我对这里的速度感兴趣。我已经在多个内核上运行它了。即使从列表之类的东西到元组的速度只有一小部分,那也会有所帮助。

【问题讨论】:

  • 你能包括一个可重现的例子吗
  • loc+isin 应该比列表理解更快

标签: python pandas dataframe


【解决方案1】:

尝试执行以下操作:

Datdaframe[dataframe[“patid”].isin(patidList)]

【讨论】:

  • 谢谢你。我很乐意尝试一下,我只是想知道删除(或保留).loc 符号背后的动机是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 2013-08-15
  • 2016-04-26
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多