python / panda中的匹配和计数组合

时间:2017-02-03 02:35:23

标签: python pandas

我有一个包含大约100万行和4列的大文件。我要分析的列是A和C. A列中的名称重复多次,但每次都与C列中的唯一名称匹配。我在C列中寻找4个特定名称,我希望他们的列A中的对应名称 我希望列A中的所有名称都包含C列中4个名称的任意组合,并且还要计算它们中每个组合的数量。 我知道这是一个令人困惑的例子:

原始档案: 我在C栏中寻找TI,NB,CC和LR,在A栏中找到它们的对应名称。

    A                B           C         D
   GB1                          TI
   GB2                          NB
   GB3                          VH
   GB1                          NB
   GB2                          CC
   GB6                          TI
   GB1                          LR
   GB1                          CC
   GB8                          JK
   GB9                          TI

我想要的结果:

 Name:         Name from column C:
  GB1          TI, NB,LR,CC
  GB2          NB,CC
  GB6          TI
  GB9          TI

此外,我想知道每种组合中有多少种:(约20种可能的组合)

Combination:          Number:
TI,NB,LR,CC             1 
NB,CC                   1
TI                      2

谢谢,

1 个答案:

答案 0 :(得分:1)

要查找所有组合,您可以按A对数据框进行分组,并在对项目进行排序后加入列C中的所有项目(用于组合目的计数);要了解有多少种组合,您可以执行 value_counts()

items = ["TI", "NB", "CC", "LR"]
# use isin method to filter the data frame so that the results only contain interested items
# ignore the sort_values here if the order of the combination matters here
df1 = df[df.C.isin(items)].groupby("A").C.apply(lambda g: ','.join(g.sort_values()))
df1

#A
#GB1    CC,LR,NB,TI
#GB2          CC,NB
#GB6             TI
#GB9             TI
#Name: C, dtype: object

df1.value_counts()

#TI             2
#CC,LR,NB,TI    1
#CC,NB          1
#Name: C, dtype: int64