2017-02-03 34 views
1

我有一个大约100万行和4列的大文件。我想要分析的列是A和C.列A中的名称重复多次,但每次都与C列中的唯一名称匹配。我正在C列中查找4个特定名称,我希望它们在列A中对应的名称。 我想要列A中的所有名称与列C中4个名称的任意组合,并且还希望统计它们中每个组合的数量。 我知道这是混淆了我表现出一个例子:Python /熊猫中的匹配和计数组合

原始文件: 我找TI,NB,CC和LR在列C和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

要找出所有的组合,可以组数据帧由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 
+0

谢谢,这是我想要的东西。对不起,我对编程不是很熟悉,你能帮忙,我怎样才能把结果保存在excel文件中? –

+0

我还有另外一个问题:C列中的“LR”,其名称有时是“LRR”。我能做些什么,该程序不会将它们视为单独的名称并将它们计为一个名称? –

+0

为了将结果保存在excel中,我想'df.to_excel(...)'?并且将'LR'和'LRR'视为相同的方法,一种方法是使用'df.C.replace(“LRR”,“LR”)''用'LR'替换'LRR'。 – Psidom