第一列数据框中每两个元素共有的元素

时间:2017-11-13 11:20:36

标签: python pandas dataframe

我和熊猫新人。我有以下数据框架。



Group           type

    G1          a1
    G1          a2
    G1          a3
    G2          a2
    G2          a1
    G3          a1
    G4          a1
    G5          a4
    G5          a1




我想为每个小组获得多少"类型"他们有共同点。像这样:



Group           type  count

    G1          a1
    G1          a2
    G1          a3
    G2          a2
    G2          a1
    G3          a1
    G4          a1
    G5          a4
    G5          a1
    
count: (G1, G2, 2) (Elements in common: a1,a2)
count: (G1, G3, 1) (Elements in common: a1)
count: (G1, G4, 1) (Elements in common: a1)
...




你知道我怎么能实现这个?是否有熊猫图书馆的任何功能可以指导我进入正确的方向。

2 个答案:

答案 0 :(得分:4)

我认为你需要numpy.intersect1d

import itertools

#get all combinations of Group values
c = list(itertools.combinations(list(set(df['Group'])), 2))

df = df.set_index('Group')

#create list of tuples of intersections and lengths 
L = []
for a, b in c:
    d = np.intersect1d(df.loc[a], df.loc[b]).tolist()
    L.append((a,b, len(d), d))

#new DataFrame
df = pd.DataFrame(L, columns=['a','b','lens','common'])
print (df)
    a   b  lens    common
0  G2  G4     1      [a1]
1  G2  G1     2  [a1, a2]
2  G2  G3     1      [a1]
3  G2  G5     1      [a1]
4  G4  G1     1      [a1]
5  G4  G3     1      [a1]
6  G4  G5     1      [a1]
7  G1  G3     1      [a1]
8  G1  G5     1      [a1]
9  G3  G5     1      [a1]

答案 1 :(得分:0)

给定数据框:

import pandas as pd
df = pd.DataFrame([['G1', 'G1', 'G2', 'G2'], ['a1', 'a2', 'a1', 'a3']]).T
df.columns = ['group', 'type']

然后有两个选择:

df.groupby('type').count()

或者如果您想明确地了解它们:

df.groupby(['type', 'group']).count()

因此你可以这样做,例如:

df1.loc['a1']

带输出:

group
G1
G2