在pandas dataframe列中查找值的组合

时间:2016-11-21 11:57:07

标签: python pandas

我在pandas df中有一张桌子

 id_x             id_y
  a                 b
  b                 c
  c                 d
  d                 a
  b                 a
and so on around (1000 rows)

我想找到每个id_x与id_y的总组合。 类似于链接的东西

即。 a与a-b,b-c,c-d的组合 类似地,b有combinations(b-c,c-d,d-a) and also a-b to be considered as a combination for b( a-b = b-a)

并创建一个具有

的数据帧df2
id   combinations  count
a          b,c,d     3
b          c,d,a     3
c          d,a,b     3
d          a,b,c     3
and so on ..(distinct product_id_'s)

以及我是否可以将每个组合放在数据框的不同列中

id   c1  c2   c3...&so on   count
a     b   c   d               3              
b     c   d   a               3

我应该遵循什么方法? 我在python上的技巧处于初级水平。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方式:

#generate dataframe    
pdf = pd.DataFrame(dict(id_x = ['a','b','c','d','b'], id_y = ['b', 'c', 'd', 'a', 'a']))

#generate second dataframe with swapped columns:
pdf_swapped = pdf.rename(columns = dict(id_x= 'id_y', id_y= 'id_x'))

#append both dataframes to each other
pdf_doubled = pd.concat([pdf, dummy_pdf])

#evaluate the frequency of each combination:
result = pdf_doubled.groupby('id_x').apply(lambda x: x.id_y.value_counts())

这给出了以下结果:

a     b    2
      d    1
b     a    2
      c    1
c     b    1
      d    1
d     c    1
      a    1

要弄清楚,组合a-b的频率如何,你可以简单地做到:

result['a', 'b']