2017-10-25 4 views
0

Ich habe eine Pandas-Serie, die eine Index-Spalte und eine zweite Spalte, 0 enthält.Wie wird der Wert von zwei Zeilen innerhalb einer Serie zusammengeführt/kombiniert, wenn die Werte der beiden Zeilen unterschiedlich sind?

Die Index-Spalte enthält mehrere Abkürzungen für Sprachen. Zwei verschiedene Werte in dieser Indexspalte sind "en" für "Englisch" und "en-gb" für "Britisches Englisch". Es gibt zahlreiche andere Werte in dieser Spalte mit „es“ für „Spanisch,‚fr‘für‚Französisch‘, und so weiter

So ist die Serie sieht ungefähr so ​​aus:.

Index  0 

en   42000 
en-gb  500 
es   320 
und  143 
fr   50 

Die Säule,

Ich versuche, zwei Werte für "en" und "en-gb" zu kombinieren. so dass sie als eins gezählt werden

Und ich möchte eine neue Serie, die wie folgt aussieht:

Index  0 

en   42500 
es   320 
und  143 
fr   50 

EDIT: Vorschläge sagen mir die Original-Datenrahmen zu ändern. Das Problem mit diesem Vorschlag ist, dass ich keinen traditionellen Datenrahmen als Quelle meiner Pandas-Serie habe.

Stattdessen ist der Ursprung meiner Pandas-Serie eine Liste von Wörterbüchern, und in diesen Wörterbüchern ist einer der Schlüssel ein anderes Wörterbuch.

Also um klar zu sein habe ich: Eine Liste von Tausenden von Wörterbüchern.

Einer der Schlüssel für jedes Wörterbuch ist "Benutzer".

Der Wert für die Taste "user" ist ein weiteres Wörterbuch.

In diesem zweiten Wörterbuch gibt es einen Schlüssel "lang" und Werte wie "en", "en-gb", "es", "fr" und so weiter.

So visuell, ich denke, eine Probe meiner ursprünglichen Daten wie folgt aussieht:

list_of_things = [ 
{'id':4444, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, 

{'id':555, 'user': {'lang':'fr', 'gibberish':'*#(#($&'}, 'location':'France'}, 

{'id':666, 'user': {'lang':'en-gb', 'gibberish':'*#(#($&'}, 'location':'Great Britain'}, 

{'id':777, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, 

{'id':888, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, {'id':999, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, 

{'id':888, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, {'id':999, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, 
{'id':888, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, {'id':999, 'user': {'lang':'es', 'gibberish':'*#(#($&'}, 'location':'Spain'}, 
{'id':888, 'user': {'lang':'en-gb', 'gibberish':'*#(#($&'}, 'location':'Great Britain'}, {'id':999, 'user': {'lang':'und', 'gibberish':'*#(#($&'}, 'location':'Unknown'}, 
] 
+0

Sie möchten zwei 'es' getrennt halten? – Wen

+0

Ah, tut mir leid, das ist ein Fehler, den ich bei der Erstellung meiner Tabelle gemacht habe - ich habe nur eine Instanz von es. – TJE

Antwort

0

Versuchen

df.groupby(df['Index'].str[:2])['0'].sum() 

oder

df.groupby(df['Index'].str.split('-').str[0])['0'].sum() 

Sie

Index 
en 42500 
es  320 
fr  50 
un  143 
erhalten
+0

Hinweis er hat zwei 'es' in der erwarteten Ausgabe – Wen

+0

@Wen, hmmm, macht nicht viel Sinn, obwohl – Vaishali

+0

Ah, tut mir leid, das ist ein Fehler, den ich bei der Erstellung meiner Tabelle hier gemacht habe - ich habe nur eine Instanz von es. – TJE

Verwandte Themen