Ich versuche, eine Tabelle aus einer dataframe
in python
, die die Gesamtzahl der gemeinsamen Häufigkeiten von Wörtern zwischen zwei bestimmten Kategorien zeigt. Um dies zu tun, habe ich zuerst eine default dict
gebaut, die jede Kategorie als key
und die Liste der Wörter, die zu dieser Kategorie gehören, an der value
enthält.Kreuzung von Werten in verschiedenen Kombinationen von mehreren Wörterbüchern (Standard dicts)
Jetzt muss ich für jede Kombination von zwei categories
Build eine Tabelle, die die Gemeinsamkeiten für eine endgültige gewünschte Ergebnistabelle wie demonstriert:
A B C
A 10 2 1
B 2 5 2
C 1 2 3
Die Beispieldaten, die ich mit als arbeite:
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
Der Arbeits Code, den ich verwende ist:
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
die oben Nachdem ausgeführt wird: das Ergebnis default dict
(vor intersection
) ist die
{'A':['dog','cat','bear','fish','monkey','tiger','lion','rabbit','horse','turtle'],'B':['dog','cat','flower','plant','bush'],'C':['dog','flower','plant']}
versuchen, dieses Problem folgende Forschung, I über die following solution kamen:, , die ein Schritt in der richtigen Richtung ist, wie es ist, zu zählen und Gruppieren von Werten nach Schlüsseln in mehreren Tabellen, wobei jedoch die Vereinigung von Werten zwischen jeder Tastenkombination des Diktats nicht berücksichtigt wird.
Ich habe auch einige Lösungen für die Suche nach passenden Schlüsseln oder Werten, aber die Mehrheit von ihnen, wie HERE, nur mit Instanzen von zwei Wörterbüchern und nicht mehrere Wörterbücher beschäftigen.
So bin ich immer noch darin stecken, wie man die Summe der gemeinsamen Elemente zwischen jeder Kombination von Schlüsseln innerhalb MEHRERER dicts zählt und summiert.
Sie für Ihre Lösung danken. Es funktioniert noch bei näherer Betrachtung bemerkte ich einen Fehler, den ich nicht verstehen kann, warum es aus Ihrem Code passiert. Wenn Sie Ihren Code auf einem größeren Dataset mit 22 Schlüsseln, Werten, verwenden, gibt das Wörterbuch 'res' ein Ergebnis zurück, wobei {('A', 'B'): x}! = {('B', 'A'): x } Irgendwelche Ideen warum? – owwoow14
Können Sie den Datensatz und das Ergebnis teilen? Damit kann ich den Fehler neu erstellen. –
Es war korrekt. Es war eine spätere Manipulation meines "Datenrahmens", die korrekt war. Antwort angenommen. – owwoow14