Analizuję zestaw danych, który jest podobny do następującego przykładu. Mam dwa różne typy danych (abc danych i xyz dane):Efektywne tworzenie dodatkowych kolumn w pandach DataFrame przy użyciu .map()
abc1 abc2 abc3 xyz1 xyz2 xyz3
0 1 2 2 2 1 2
1 2 1 1 2 1 1
2 2 2 1 2 2 2
3 1 2 1 1 1 1
4 1 1 2 1 2 1
Chcę utworzyć funkcję, która dodaje kolumnę kategoryzowania dla każdego abc kolumny, która istnieje w dataframe. Używając list nazw kolumn i słownika mapowania kategorii, udało mi się uzyskać pożądany wynik.
abc_columns = ['abc1', 'abc2', 'abc3']
xyz_columns = ['xyz1', 'xyz2', 'xyz3']
abc_category_columns = ['abc1_category', 'abc2_category', 'abc3_category']
categories = {1: 'Good', 2: 'Bad', 3: 'Ugly'}
for i in range(len(abc_category_columns)):
df3[abc_category_columns[i]] = df3[abc_columns[i]].map(categories)
print df3
Wynik końcowy:
abc1 abc2 abc3 xyz1 xyz2 xyz3 abc1_category abc2_category abc3_category
0 1 2 2 2 1 2 Good Bad Bad
1 2 1 1 2 1 1 Bad Good Good
2 2 2 1 2 2 2 Bad Bad Good
3 1 2 1 1 1 1 Good Bad Good
4 1 1 2 1 2 1 Good Good Bad
Podczas gdy pętla na końcu for
działa dobrze, czuję się jak należy używać lambda
funkcji Pythona, ale nie potrafię zrozumieć.
Czy istnieje skuteczniejszy sposób mapowania w dynamicznej liczbie kolumn o rozmiarze abc?
Andy, wielkie dzięki! –
@AndyHayden, jaka jest różnica między .applymap na ramce danych i .map na pandasowej ramce danych? – yoshiserry
@yoshiserry applymap robi to do każdej komórki, a nie do każdego wiersza/kolumny. –