【问题标题】:Get combinations of column values from dataframe从数据框中获取列值的组合
【发布时间】:2021-01-10 09:32:06
【问题描述】:

我有一个这样的 DataFrame 70581 行

    id    created_at ... resource_id
230789    2017-01-19 ...         490
230722    2017-01-19 ...         514
   ...           ... ...         ...
312341    2017-08-27 ...         551

我想获取所有可能的 resource_id 列对。如果对重复,我想将一对的计数器加 1。结果可能类似于:(490,514) count 5。

我尝试使用list(itertools.combinations(df['resource_id'],2)) 来获取这些对,但得到了 MemoryError。 我怎样才能得到我想要的?

【问题讨论】:

  • Lev Gelman 这很有帮助,但首先我需要将这些对放入单独的列中,以实现该问题中所写的内容。感谢您的帮助!
  • 您不能对计数元素使用迭代器。在迭代之前隐藏元素的数量。一种有用的方法是按资源 id 对行进行分组并对实例进行计数,然后将它们组合起来,并乘以计数器。
  • 为什么在生成器周围使用 list()?根本不创建完整的列表
  • @Yanirmr 我的方法是首先获取所有带有重复的配对,然后计算每次出现的次数并将其放入字典中,但我的内存用完了。我会尝试分组

标签: python-3.x pandas dataframe combinations


【解决方案1】:

您不能对计数元素使用迭代器。在迭代之前隐藏元素的数量。

此外,就效率而言,首选方法是首先计算每个元素,然后找到对。这可以为您节省大量时间,因为对份额的总和乘以每个元素出现的次数。

你可以试试这样的:

from collections import Counter
import itertools
MyList = [1,1,1,2,3,4,4] # you can insert here your df.series as list
a = dict(Counter(MyList))

combinations = itertools.combinations(list(a.keys()),2)
for i in combinations:
    print (i,a[i[0]]*a[i[1]])

输出是:

 (1, 2) 3
 (1, 3) 3
 (1, 4) 6
 (2, 3) 1
 (2, 4) 2
 (3, 4) 2

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 2020-07-11
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多