2017-09-30 5 views
1

Ich bin neu bei Pandas und versuche, das Folgende aus mehreren Excel-Blättern mit mehreren Datenrahmen zu wiederholen.Pandas berechnen neue Spalte über mehrere Datenrahmen

Hier ist die High-Level-Struktur:

Master_df
Master_UID | Komponenten_ID_1 | Menge_1 | ... | Komponent_ID_8 | Quantity_8

Component_type_1_df
Component_ID | ... | Gewicht

Component_type_2_df
Component_ID | ... |

Gewicht

Master_UID [ 'Component_ID_1'] enthält ‚Component_ID die von beiden Component_type_1_df und Component_type_2_df

Jetzt in Master_df, würde Ich mag Spalte basierend auf Gewicht Weight_1 Spalten aus dem 2 Component_type_X_df erstellen .

multipliziert mit Master_df ['Menge_1'].

Vielen Dank.

+0

vergessen zu erwähnen, nicht Component_type_X_df die die gleiche Struktur haben. Ich suche auch nach einem Weg, um nicht mit Master_df zu verschmelzen, sondern nur neue Berechnungen hinzuzufügen. – user319436

Antwort

1
Master_df['Weight_1'] = Master_df['Component_ID'].map(Component_type_1_df.set_index('Component_ID')['weight']) * Master_df['Quantity'] 

Ohne eine Datenreihe mit spielen, kann ich nicht garantieren kann, dass dies wie gewünscht funktionieren, aber die Kartenfunktion sollten Sie helfen bekommen, wo Sie hinwollen.

Wenn Sie nicht möchten, dass die berechnete Gewicht Säule bis zum Ende des Master anhängen df Sie Folgendes tun:

Master_df.insert({desired_index_position},'Weight_1', Master_df['Component_ID'].map(Component_type_1_df.set_index('Component_ID')['weight']) * Master_df['Quantity') 

Vor kurzem habe ich tatsächlich eine Frage ähnlich wie diese geschrieben. Ich habe einen Datensatz veröffentlicht, mit dem man herumspielen kann, damit man die Funktion lernen kann.

PANDAS vlookup against series with common index using map

+0

Hallo Yale! Perfekt! – user319436

+0

Bitte akzeptieren Sie die Antwort, wenn das ist, was Sie mit :) –

+0

Hallo @ yale-newman! Funktioniert perfekt! Nur eine kleine Korrektur für alle anderen, die diese Lösung umgehen, verwenden '... [Gewicht]) * Master_df [' Menge_1 ']', um die Frage zu beantworten. Nochmals vielen Dank und ich überprüfe deinen Link, um mein Excel-Gehirn langsam in Pandas umzuwandeln :) – user319436

1

Da die beiden Component_type_*_df Datenrahmen nicht die gleiche Struktur haben, verketten nur die Teile dieser Datenrahmen, die Sie benötigen, dann das Ergebnis mit Master_df verschmelzen.

cols = ['Component_ID', 'weight'] 
Components_df = pd.concat([Component_type_1_df[cols], Component_type_2_df[cols]], axis=0) 
Master_df = pd.merge(Master_df, Components_df, 
        left_on='Component_ID_1', 
        right_on='Component_ID', how='left') 
Master_df['weight'] = Master_df['weight'] * Master_df['Quantity_1'] 
Master_df = Master_df.rename({'weight':'Weight_1'}) 

Da wir die Component_type_*_df Datenrahmen auf nur zwei Spalten beschränkt haben, und eine Spalte wird als Einarbeitungsschlüssel verwendet, fügt der Zusammenführung nur eine zusätzliche Spalte, weight-Master_df.

Da Sie nicht wünschen, die fusionierte weight Spalte in Master_df zu haben, der Code führt über die Berechnung in Master_df['weight'] aber dann umbenennt diese Spalte Weight_1.

+0

Hallo unutbu, danke für deine Antwort. Sorry, ich habe nicht geklärt, aber die Component_type_X_dfs haben nicht die gleiche Struktur. Ich suche auch nach einem Weg, um zu vermeiden, mit Master_df zu verschmelzen, sondern nur neue Berechnungen hinzuzufügen. – user319436

Verwandte Themen