Próbuję zrobić coś, co powinno być naprawdę proste w pandach, ale wydaje się, że cokolwiek innego. Próbuję dodać kolumnę do istniejącej ramki danych pandy, która jest zmapowaną wartością na podstawie innej (istniejącej) kolumny. Oto mały sprawdzian:Dodawanie nowej kolumny pandy z mapowaną wartością ze słownika
import pandas as pd
equiv = {7001:1, 8001:2, 9001:3}
df = pd.DataFrame({"A": [7001, 8001, 9001]})
df["B"] = equiv(df["A"])
print(df)
Miałem nadzieję dodaje skutkowałoby:
A B
0 7001 1
1 8001 2
2 9001 3
Zamiast tego pojawia się błąd informujący mnie, że równoważnik nie jest wymagalne funkcji. Uczciwy, jest to słownik, ale nawet jeśli zawinę to w funkcję, wciąż dostaję frustracji. Więc starałem się użyć funkcji map, który wydaje się działać z innych operacji, ale również został pokonany przez użycie słownika:
df["B"] = df["A"].map(lambda x:equiv[x])
w tym przypadku po prostu KeyError: 8001. Czytałem poprzez dokumentacji i poprzednie posty, ale nie spotkałem się jeszcze z niczym, co sugerowałoby mieszanie słowników z ramkami danych pandy. Wszelkie sugestie będą bardzo mile widziane.
Czy istnieje sposób, aby to zrobić, jeśli dane są łańcuch zamiast int? To daje mi NaNs na ciągi. – griffinc
Nieważne, zobacz odpowiedzi na http://stackoverflow.com/questions/20250771/remap-values-in-pandas-column-with-a-dict – griffinc