计算包含熊猫中特定数据组合的独特项目

时间:2019-09-12 18:48:52

标签: python pandas dataframe

我正在使用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(),但我不知道如何从那里获取它。

提前谢谢

2 个答案:

答案 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