2016-04-19 5 views
2

Ich habe ein Datenrahmen in etwa so:Artikel in der Spalte Ersetzen auf Liste basiert

Date  Value 
19990506 0.6 
19990506 0.8 
19990607 1.2 
20000802 0.4 

und ich habe auch zwei Listen wie folgt aus:

list1 = ['19990506', '19990607', '20000802'] 
list2 = ['1999201', '1999232', '2000252'] 

die Elemente in list1 decken sich mit den Werten in der Spalte Date und ich möchte sie durch die Elemente ersetzen, die in list2 sind. So wird in Date19990506 durch 1999201 ersetzt und 19990607 wird ersetzt mit . Ich denke, ich muss meine Listen dazu komprimieren, um das zu tun, aber danach bin ich ratlos, wie es am besten geht. Ich zeige einen sehr vereinfachten Datenrahmen, so dass die Verwendung von .replace für mich nicht effizient ist. Meine gewünschte Ausgabe ist dies:

Date  Value 
1999201 0.6 
1999201 0.8 
1999232 1.2 
2000252 0.4 

Antwort

4

Wenn Sie ein Wörterbuch erstellen, die list1-list2 abbildet, dann können Sie verwenden Series.map:

df = pd.read_clipboard() 

list1 = ['19990506', '19990607', '20000802'] 
list2 = ['1999201', '1999232', '2000252'] 

# When I read in your data I get ints in the Date column 
# so I need ints in the replacement map, if you have 
# strings then remove the int() conversions 
replacement_map = {int(i1): int(i2) for i1, i2 in zip(list1, list2)} 
df['Date'] = df['Date'].map(replacement_map) 
df 
Out[13]: 
     Date Value 
0 1999201 0.6 
1 1999201 0.8 
2 1999232 1.2 
3 2000252 0.4 
Verwandte Themen