2013-07-15 12 views
6

Rozważmy następujący dataframeza pomocą słownika zastąpienie wartości kolumny o podanych numerach indeksów na dataframe PANDAS

df_test = pd.DataFrame({'a' : [1, 2, 8], 'b' : [np.nan, np.nan, 5], 'c' : [np.nan, np.nan, 4]}) 
df_test.index = ['one', 'two', 'three'] 

co daje

 a b c 
one 1 NaN NaN 
two 2 NaN NaN 
three 8 5 4 

mam słownika wymiany rzędu dla kolumn B i C . Na przykład:

{ 'one': [3.1, 2.2], 'two' : [8.8, 4.4] } 

gdzie 3.1 i 8.8 zastępuje kolumna B i 2.2 i 4.4 zastępuje kolumna C, tak, że wynik jest

 a b c 
one 1 3.1 2.2 
two 2 8.8 4.4 
three 8 5 4 

wiem, jak wprowadzić te zmiany z pętli for:

index_list = ['one', 'two'] 
value_list_b = [3.1, 8.8] 
value_list_c = [2.2, 4.4] 
for i in range(len(index_list)): 
    df_test.ix[df_test.index == index_list[i], 'b'] = value_list_b[i] 
    df_test.ix[df_test.index == index_list[i], 'c'] = value_list_c[i] 

ale jestem pewien, że jest lepszy i szybszy sposób korzystania ze słownika!

Chyba można to zrobić za pomocą metody DataFrame.replace DataFrame.replace, ale nie mogłem tego rozgryźć.

Dzięki za pomoc,

cd

Odpowiedz

4

Szukasz DataFrame.update. Jedynym akcentem w twoim przypadku jest to, że określasz aktualizacje jako słownik wierszy, podczas gdy DataFrame jest zwykle budowane ze słownika kolumn. Słowo kluczowe orient może sobie z tym poradzić.

In [25]: df_test 
Out[25]: 
     a b c 
one 1 NaN NaN 
two 2 NaN NaN 
three 8 5 4 

In [26]: row_replacements = { 'one': [3.1, 2.2], 'two' : [8.8, 4.4] } 

In [27]: df_update = DataFrame.from_dict(row_replacements, orient='index') 

In [28]: df_update.columns = ['b', 'c'] 

In [29]: df_test.update(df_update) 

In [30]: df_test 
Out[30]: 
     a b c 
one 1 3.1 2.2 
two 2 8.8 4.4 
three 8 5.0 4.0 

from_dict jest specyficznym konstruktor DataFrame że daje nam orient słowo kluczowe, nie jest dostępny, jeśli tylko powiedzieć DataFrame(...). Z przyczyn, których nie znam, nie możemy przekazać nazw kolumn ['b', 'c'] do from_dict, więc podałem je w oddzielnym kroku.

+0

To działa dla mnie, wielkie dzięki! – cd98

Powiązane problemy