我正在使用pandas数据框来提供有关相当大的csv的信息。我想找到多少个包含特定关联的唯一ID。我想找到的内容如下所示。我知道可以使用熊猫在一行上完成此操作,但是我无法弄清楚语法的正确组合来获取所需的数据。
我尝试在数据帧上使用groupby('ID')['Associations'],但无法弄清楚如何给我保存组合的ID数。例如下面提供的示例
csv = pd.read_csv('export.csv', delimiter=",")
print(csv)
ID Associations
1 "AA"
1 "BB"
1 "CC"
2 "AA"
3 "BB"
4 "CC"
5 "AA"
5 "BB"
6 "AA"
6 "CC"
7 "CC"
7 "BB"
7 "AA"
因此,当我寻找特定的组合,例如[“ AA”,“ BB”,“ CC”]或[“ AA,CC”]时,它会给我一些计数,例如
give_counts(["AA,"BB","CC"])
>> 2
# Because IDs 1 and 7 have "AA","BB", and"CC"
give_counts(["AA,"CC"])
>> 3
# Because IDs 1,6, and 7 has "AA", and "CC"
give_counts(["AA"])
>> 5
# Because IDs 1,2,5,6, and 7 has "AA"
因此,基本上,我正在寻找与该数据组合关联的唯一ID。我知道这涉及使用groupby(),但我不知道如何从那里获取它。
提前谢谢
答案 0 :(得分:0)
ID
分组以汇总Associations
列。Associations
进行计数。value_counts
为您提供每种组合的数量。import pandas as pd
df = pd.DataFrame({'ID':[1,1,1,2,2,7,7,7] ,'Associations':['AA','BB','CC','AA','CC','AA','CC','BB']})
temp = df.groupby('ID')['Associations'].apply(lambda x: ''.join(sorted(x)))
temp.value_counts()
输出:
AABBCC 2
AACC 1
Name: Associations, dtype: int64
ID
的哪个组合
>>>temp
ID
1 AABBCC
2 AACC
7 AABBCC
答案 1 :(得分:0)
您可以尝试以下方法:
def give_count(lst):
return df.groupby('ID')['Associations'].apply(lambda x: all((x == i).any() for i in lst)).sum()
print(give_count(['"AA"']))
print(give_count(['"AA"','"CC"']))
print(give_count(['"AA"','"BB"','"CC"']))
输出:
5
3
2