使用itertools,正确融合和分组,以使用Pandas对每个属性值计算事件对

kspr

我有以下格式的表格

  Id   |   Sequence   |   Attribute A  |  Attribute B |
  ID1       [A,B,C,D]         A1              B1        
  ID2       [A,B,F,G]         A2              B3            
  ID3       [A,B,C,D]         A1              B1        

我想为每个事件组合和属性值计算唯一ID的数量。

决赛桌应该像

  Pair    |  Attribute Type | Attribute Value   | ID Count
  (A,B)        Attribute A          A1              2        #Event A happens before event B in 2 unique ID's where A1 is the value of Attribute A.
  (A,C)        Attribute A          A1              2
  (A,D)        Attribute A          A1              2
  (B,C)        Attribute A          A1              2
  (B,D)        Attribute A          A1              2
  (C,D)        Attribute A          A1              2
  (A,B)        Attribute A          A2              1
  (A,F)        Attribute A          A2              1 
  (A,G)        Attribute A          A2              1 
  (B,F)        Attribute A          A2              1
  (B,G)        Attribute A          A2              1
  (F,G)        Attribute A          A2              1
  (A,B)        Attribute B          B1              2
  (A,C)        Attribute B          B1              2
  (A,D)        Attribute B          B1              2
  (B,C)        Attribute B          B1              2
  (B,D)        Attribute B          B1              2
  (C,D)        Attribute B          B1              2
  (A,B)        Attribute B          B3              1
  (A,F)        Attribute B          B3              1 
  (A,G)        Attribute B          B3              1 
  (B,F)        Attribute B          B3              1
  (B,G)        Attribute B          B3              1
  (F,G)        Attribute B          B3              1

正确的做法是什么?实际上,我将不仅具有2个属性。

这就是我走了多远

 df['Sequence Combs'] = df['Sequence'].apply(lambda x: list(itertools.combinations(x,2)))
 

  Id   |   Sequence   |          Event Combs                   |   Attribute A  |  Attribute B |
  ID1       [A,B,C,D]   [(A,B),(A,C),(A,D),(B,C),(B,D),(C,D)]           A1              B1        
  ID2       [A,B,F,G]   [(A,B),(A,F),(A,G),(B,F),(B,G),(F,G)]           A2              B3              
  ID3       [A,B,C,D]   [(A,B),(A,C),(A,D),(B,C),(B,D),(C,D)]           A1              B1      

然后爆炸

df = df.explode('Sequence Combs')

我得到以下

  Id   |   Sequence   |  Event Combs |  Attribute A  |  Attribute B |
  ID1       [A,B,C,D]       (A,B)           A1              B1        
  ID1       [A,B,C,D]       (A,C)           A1              B1        
  ID1       [A,B,C,D]       (A,D)           A1              B1        
  ID1       [A,B,C,D]       (B,C)           A1              B1        
  ID1       [A,B,C,D]       (B,D)           A1              B1        
  ID1       [A,B,C,D]       (C,D)           A1              B1        
  ...          ...           ..             ..              ..           

但是我不确定如何从这里开始,有什么想法吗?

丹妮·梅塞乔

您可以这样做:

from itertools import combinations

# create function for creating a list the 2-combinations
combs = lambda x: list(combinations(x, r=2))

# create new DataFrame with now the Sequence column is the list of the 2-combinations
res = df.assign(seq=df['Sequence'].apply(combs)).drop('Sequence', axis=1).rename(columns={'seq' : 'Sequence'})

# explode, then melt
res = res.explode('Sequence').melt(id_vars=['Id', 'Sequence'], var_name='Attribute Type', value_name='Attribute Value')

# finally group by all the columns but Id, and count
res = res.groupby(['Sequence', 'Attribute Type', 'Attribute Value'])['Id'].count()

print(res)

输出量

Sequence  Attribute Type  Attribute Value
(A, B)    Attribute A     A1                 2
                          A2                 1
          Attribute B     B1                 2
                          B3                 1
(A, C)    Attribute A     A1                 2
          Attribute B     B1                 2
(A, D)    Attribute A     A1                 2
          Attribute B     B1                 2
(A, F)    Attribute A     A2                 1
          Attribute B     B3                 1
(A, G)    Attribute A     A2                 1
          Attribute B     B3                 1
(B, C)    Attribute A     A1                 2
          Attribute B     B1                 2
(B, D)    Attribute A     A1                 2
          Attribute B     B1                 2
(B, F)    Attribute A     A2                 1
          Attribute B     B3                 1
(B, G)    Attribute A     A2                 1
          Attribute B     B3                 1
(C, D)    Attribute A     A1                 2
          Attribute B     B1                 2
(F, G)    Attribute A     A2                 1
          Attribute B     B3                 1
Name: Id, dtype: int64

如果要真正匹配预期的输出,请执行以下操作:

# finally group by all the columns but Id, and count
res = res.groupby(['Sequence', 'Attribute Type', 'Attribute Value'], as_index=False)['Id'].count().rename({'Id' : 'Id Count'}).sort_values('Attribute Type')

print(res)

输出量

   Sequence Attribute Type Attribute Value  Id
0    (A, B)    Attribute A              A1   2
1    (A, B)    Attribute A              A2   1
20   (C, D)    Attribute A              A1   2
4    (A, C)    Attribute A              A1   2
6    (A, D)    Attribute A              A1   2
18   (B, G)    Attribute A              A2   1
8    (A, F)    Attribute A              A2   1
10   (A, G)    Attribute A              A2   1
22   (F, G)    Attribute A              A2   1
12   (B, C)    Attribute A              A1   2
16   (B, F)    Attribute A              A2   1
14   (B, D)    Attribute A              A1   2
21   (C, D)    Attribute B              B1   2
19   (B, G)    Attribute B              B3   1
17   (B, F)    Attribute B              B3   1
11   (A, G)    Attribute B              B3   1
13   (B, C)    Attribute B              B1   2
9    (A, F)    Attribute B              B3   1
7    (A, D)    Attribute B              B1   2
5    (A, C)    Attribute B              B1   2
3    (A, B)    Attribute B              B3   1
2    (A, B)    Attribute B              B1   2
15   (B, D)    Attribute B              B1   2
23   (F, G)    Attribute B              B3   1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Siddhi查询以使用当前事件的值和最后一个事件的值来计算新值

来自分类Dev

SQL Server查询以使用重复值对记录进行分组和排名

来自分类Dev

使用dplyr分组时如何计算均值,最小值和最大值?

来自分类Dev

如何使用 Pandas 比较和计算高/低值

来自分类Dev

按季度平均分组并获取在平均计算中使用的值-pandas

来自分类Dev

正确使用属性和自动实现的属性?

来自分类Dev

计算每个值和时间步长之间的斜率 - pandas

来自分类Dev

用NA分组计算每个值

来自分类Dev

计算值未使用donejs正确更新

来自分类Dev

熊猫分组索引以使用各自的值分隔列

来自分类Dev

将具有相同属性的连续事件分组,并计算其他列的累计值

来自分类Dev

将具有相同属性的连续事件分组,并计算其他列的累计值

来自分类Dev

使用pandas cut对值进行分组

来自分类Dev

使用Pandas分组的累计值计数

来自分类Dev

分组值并使用Python在Pandas上合并

来自分类Dev

使用Mysql和php正确计算税收

来自分类Dev

在R中使用IGraph,如何从连接到每个顶点的那些属性计算最高/最低边缘属性值?

来自分类Dev

使用xpath和php分组数据值

来自分类Dev

如何使用python分组和缩放值?

来自分类Dev

您可以使用LESS将变量用作CSS属性和值吗?

来自分类Dev

使用 Python Pandas 进行枚举和分组

来自分类Dev

使用 Pandas 进行聚合和分组

来自分类Dev

swift:使用存储的属性作为计算属性是正确的

来自分类Dev

swift:使用存储的属性作为计算属性是正确的

来自分类Dev

使用itertools将元组分组的列表

来自分类Dev

自定义属性以使用空值过滤属性

来自分类Dev

使用Python Pandas进行多种分组和分组汇总

来自分类Dev

对每个分组的布尔值应用相同的公式,并使用输出Pandas创建一个新列

来自分类Dev

使用itertools将连续元组按第二个值分组

Related 相关文章

  1. 1

    Siddhi查询以使用当前事件的值和最后一个事件的值来计算新值

  2. 2

    SQL Server查询以使用重复值对记录进行分组和排名

  3. 3

    使用dplyr分组时如何计算均值,最小值和最大值?

  4. 4

    如何使用 Pandas 比较和计算高/低值

  5. 5

    按季度平均分组并获取在平均计算中使用的值-pandas

  6. 6

    正确使用属性和自动实现的属性?

  7. 7

    计算每个值和时间步长之间的斜率 - pandas

  8. 8

    用NA分组计算每个值

  9. 9

    计算值未使用donejs正确更新

  10. 10

    熊猫分组索引以使用各自的值分隔列

  11. 11

    将具有相同属性的连续事件分组,并计算其他列的累计值

  12. 12

    将具有相同属性的连续事件分组,并计算其他列的累计值

  13. 13

    使用pandas cut对值进行分组

  14. 14

    使用Pandas分组的累计值计数

  15. 15

    分组值并使用Python在Pandas上合并

  16. 16

    使用Mysql和php正确计算税收

  17. 17

    在R中使用IGraph,如何从连接到每个顶点的那些属性计算最高/最低边缘属性值?

  18. 18

    使用xpath和php分组数据值

  19. 19

    如何使用python分组和缩放值?

  20. 20

    您可以使用LESS将变量用作CSS属性和值吗?

  21. 21

    使用 Python Pandas 进行枚举和分组

  22. 22

    使用 Pandas 进行聚合和分组

  23. 23

    swift:使用存储的属性作为计算属性是正确的

  24. 24

    swift:使用存储的属性作为计算属性是正确的

  25. 25

    使用itertools将元组分组的列表

  26. 26

    自定义属性以使用空值过滤属性

  27. 27

    使用Python Pandas进行多种分组和分组汇总

  28. 28

    对每个分组的布尔值应用相同的公式,并使用输出Pandas创建一个新列

  29. 29

    使用itertools将连续元组按第二个值分组

热门标签

归档