【问题标题】:Count the number of occurrences for values dictionary list python计算值字典列表python的出现次数
【发布时间】:2021-12-04 08:38:39
【问题描述】:

我想知道我的字典中值的出现次数:

test = {
  "Staph": ["grp1","grp2","grp3"],
  "Lacto": ["grp2","grp3","grp4","gr5"],
  "Bacilus": ["grp2","grp4","grp6"]
}

例如,我想为我的密钥获取公共组:

grp1 仅在 Staph 中,因此 grp1 = 1,而 grp2 在“Staph”、“Lacto”和“Bacillus”中,因此 grp2 = 3

grp1 = 1 , grp2 = 3 , grp3 = 2, grp4 = 2 , grp5 = 1, grp6 = 1

之后我想计算我的先例数的出现次数,例如:

我有 grp1 = 1 和 grp5 = 1 和 grp6 = 1 所以只有一个键中有 1 是一组的次数是 3 或者如果我采取 grp3 = 2 , grp4 = 2 的次数有不同键的 2 个相同组是 2

所以我想要这样的结果:

number : the number of times n groups appear in different keys

Staph      grp1       grp2       grp3
Lacto                 grp2       grp3         grp4     grp5
Bacillus              grp2                    grp4               grp6
            1          3          2            2        1         1 


number_of_1 = 3
number_of_2 = 2
number_of_3 = 1 

希望你理解,谢谢你的回答

【问题讨论】:

  • 预期的输出是熊猫数据框吗?
  • 是的,我需要一个数据框在 R 之后进行绘图

标签: python pandas list dataframe dictionary


【解决方案1】:

你去吧:)

test = {
  "Staph": ["grp1","grp2","grp3"],
  "Lacto": ["grp2","grp3","grp4","gr5"],
  "Bacilus": ["grp2","grp4","grp6"]
}

groups = set()

for i,j in test.items():
    for k in j:
        groups.add(k)

counts = []

new_test = {}

for k in groups:
    for i in test.keys():
        if k in test[i]:
            if k not in new_test:
                new_test[k] = 1
            else:
                new_test[k] += 1
print(new_test)

values = [i for i in new_test.values()]

values_set = set(values)

count_values = []


for i in values_set:
    count = 0
    for j in values:
        if i == j:
            count += 1
    count_values.append([i,count])

print(count_values)

【讨论】:

    【解决方案2】:

    您可以使用Counter() 实现来进一步简化代码

    test = {
      "Staph": ["grp1","grp2","grp3"],
      "Lacto": ["grp2","grp3","grp4","gr5"],
      "Bacilus": ["grp2","grp4","grp6"]
    }
    
    from collections import Counter
    
    grp_counter = Counter()
    for k, v in test.items():
        grp_counter.update(Counter(v))
    
    print(grp_counter)
    

    【讨论】:

      【解决方案3】:

      执行以下操作:

      import pandas as pd
      
      test = {
          "Staph": ["grp1", "grp2", "grp3"],
          "Lacto": ["grp2", "grp3", "grp4", "grp5"],
          "Bacilus": ["grp2", "grp4", "grp6"]
      }
      
      # prepare data
      all_values = sorted(set().union(*test.values()))
      data = {key: [val if val in values else None for val in all_values] for key, values in test.items()}
      
      # construct dataframe from data
      df = pd.DataFrame.from_dict(data,orient="index")
      
      # compute counts
      row = df.notna().sum().T
      row.name = "Counts"
      
      # append counts as a new row
      res = df.append(row).fillna("")
      print(res)
      

      输出

                  0     1     2     3     4     5
      Staph    grp1  grp2  grp3                  
      Lacto          grp2  grp3  grp4  grp5      
      Bacilus        grp2        grp4        grp6
      Counts      1     3     2     2     1     1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-23
        • 2016-09-23
        • 2018-06-30
        • 2012-10-05
        • 2022-12-04
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        相关资源
        最近更新 更多