【问题标题】:pandas - Perform computation against a reference record within groupspandas - 对组内的参考记录执行计算
【发布时间】:2015-02-19 01:08:15
【问题描述】:

对于 DataFrame 中的每一行数据,我想计算该特定行的列 AB 中唯一值的数量,以及由另一列 ID 标识的组中的参考行。这是一个玩具数据集:

d = {'ID' : pd.Series([1,1,1,2,2,2,2,3,3])
     ,'A' : pd.Series([1,2,3,4,5,6,7,8,9])
     ,'B' : pd.Series([1,2,3,4,11,12,13,14,15])
     ,'REFERENCE' : pd.Series([1,0,0,0,0,1,0,1,0])}
data = pd.DataFrame(d)

数据如下:

In [3]: data
Out[3]: 
   A   B  ID  REFERENCE
0  1   1   1          1
1  2   2   1          0
2  3   3   1          0
3  4   4   2          0
4  5  11   2          0
5  6  12   2          1
6  7  13   2          0
7  8  14   3          1
8  9  15   3          0

现在,在使用 ID 定义的每个组中,我想将每条记录与参考记录进行比较,并且我想计算组合的唯一 AB 值的数量。例如,我可以通过取 len(set([4,4,6,12])) 来计算数据记录 3 的值,得到 3。结果应该如下所示:

   A   B  ID  REFERENCE  CARDINALITY
0  1   1   1          1            1
1  2   2   1          0            2
2  3   3   1          0            2
3  4   4   2          0            3
4  5  11   2          0            4
5  6  12   2          1            2
6  7  13   2          0            4
7  8  14   3          1            2
8  9  15   3          0            3

我能想到实现这一点的唯一方法是使用循环遍历每个分组对象,然后循环分组对象中的每个记录,并根据参考记录计算它。这是非pythonic并且非常慢。任何人都可以建议一种矢量化方法来实现相同的目标吗?

【问题讨论】:

  • 您的数据似乎属于组。您是否考虑过在加载到 Pandas 之前对数据进行预分组?
  • @ericmjl 你的意思是有多少组就有多少个数据框?像data.groupby('ID')这样的事情不是更好吗?
  • 我正打算确切地建议你提到的内容。

标签: python-2.7 pandas split-apply-combine


【解决方案1】:

我会创建一个新列,在其中将 a 和 b 组合成一个元组,然后我会分组,然后使用 groups = dict(list(groupby)),然后使用 len() 获取每个帧的长度

【讨论】:

    猜你喜欢
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多