J'essaie de construire une table à partir d'un dataframe
en python
qui montre le total des fréquences communes de mots entre deux catégories particulières. Pour ce faire, j'ai d'abord construit un default dict
qui contient chaque catégorie comme key
et la liste des mots qui se rapportent à cette catégorie au value
.Intersection de valeurs dans différentes combinaisons de plusieurs dictionnaires (dicts par défaut)
Maintenant, je dois pour chaque combinaison de deux categories
construire une table qui montre les points communs pour une table de résultat final souhaité, tels que:
A B C
A 10 2 1
B 2 5 2
C 1 2 3
Les données de l'échantillon que je travaille avec est comme:
Cat Item
A dog
A cat
A bear
A fish
A monkey
A tiger
A lion
A rabbit
A horse
A turtle
B dog
B cat
B flower
B plant
B bush
C dog
C flower
C plant
Le code de travail que j'utilise est:
import pandas as pd
import numpy as np
from collections import defaultdict
inFile = '\path\to\infile.csv'
data = pd.read_csv(inFile, sep='\t')
dicts = defaultdict(list)
for i, j in zip(data['Cat'],data['Item']):
dicts[i].append(j)
for k,v in dicts.iteritems():
set1 = set(v)
set2 = set(v)
for k in set1.intersection(set2):
print k,v
Après l'exécution de ce qui précède: le résultat default dict
(avant intersection
) est la suivante
{'A':['dog','cat','bear','fish','monkey','tiger','lion','rabbit','horse','turtle'],'B':['dog','cat','flower','plant','bush'],'C':['dog','flower','plant']}
Essayer de recherche ce problème, je suis tombé sur le following solution:, qui est un pas dans la bonne direction, car elle compte et regrouper les valeurs en fonction des clés dans plusieurs dics, cependant il ne prend pas en compte l'union des valeurs entre chaque combinaison de touches de la dict. J'ai également examiné certaines solutions pour trouver des clés ou des valeurs correspondantes, mais la majorité d'entre elles, telles que HERE, ne traitent que des instances de deux dictionnaires et non de plusieurs dictionnaires.
Ainsi, je suis toujours coincé dans la façon de compter et de totaliser le total des éléments communs entre chaque combinaison de touches dans plusieurs dicts.
Nous vous remercions de votre solution. Cela fonctionne encore en regardant de plus près j'ai remarqué une erreur que je ne peux pas comprendre pourquoi cela arrive de votre code. Lorsque vous exécutez votre code sur un ensemble de données plus grand avec 22 clés, valeurs, le dictionnaire 'res' renvoie un résultat où {('A', 'B'): x}! = {('B', 'A'): x } Des idées pourquoi? – owwoow14
Pouvez-vous partager l'ensemble de données et le résultat? Alors que je peux recréer l'erreur. –
C'était correct. Ce fut une manipulation ultérieure de mon «dataframe» qui était correcte. Réponse acceptée. – owwoow14