Ich habe einen Datenrahmen df
df
Object Action Cost1 Cost2
0 123 renovate 10000 2000
1 456 do something 0 10
2 789 review 1000 50
und ein Wörterbuch (genannt Wörterbuch)
dictionary
{'Object_new': ['Object'],
'Action_new': ['Action'],
'Total_Cost': ['Cost1', 'Cost2']}
Außerdem habe ich einen (am Anfang leeren) Datenrahmen df_new , der fast die gleichen Informationen wie df enthalten sollte, außer dass die Spaltennamen unterschiedlich sein müssen (Benennung gemäß dem Wörterbuch) und dass einige Spalten von df konsolidiert werden sollten (z eine Summenoperation) basierend auf dem Wörterbuch.
Das Ergebnis sollte folgendermaßen aussehen:
df_new
Object_new Action_new Total_Cost
0 123 renovate 12000
1 456 do something 10
2 789 review 1050
Wie kann ich dieses Ergebnis nur mit dem Wörterbuch erzielen? Ich habe versucht, die Funktion .map () zu verwenden, konnte aber nicht herausfinden, wie die Summenoperation damit ausgeführt werden soll.
Der Code zum Reproduzieren beider Datenrahmen und des Wörterbuchs ist beigefügt:
# import libraries
import pandas as pd
### create df
data_df = {'Object': [123, 456, 789],
'Action': ['renovate', 'do something', 'review'],
'Cost1': [10000, 0, 1000],
'Cost2': [2000, 10, 50],
}
df = pd.DataFrame(data_df)
### create dictionary
dictionary = {'Object_new':['Object'],
'Action_new':['Action'],
'Total_Cost' : ['Cost1', 'Cost2']}
### create df_new
# data_df_new = pd.DataFrame(columns=['Object_new', 'Action_new', 'Total_Cost' ])
data_df_new = {'Object_new': [123, 456, 789],
'Action_new': ['renovate', 'do something', 'review'],
'Total_Cost': [12000, 10, 1050],
}
df_new = pd.DataFrame(data_df_new)
Ein Spiel mit groupby
:
inv_dict = {x:k for k,v in dictionary.items() for x in v}
df_new = df.groupby(df.columns.map(inv_dict),
axis=1).sum()
Ausgabe:
Action_new Object_new Total_Cost
0 renovate 123 12000
1 do something 456 10
2 review 789 1050
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen