W jakiś sposób proste dodanie łańcucha przed napisami jako część kolumny w podzbiorze mojej ramki danych nie działa. Bez otrzymania komunikatu o błędzie nowy ciąg nie powoduje dodania do kolumny_1 na podstawie wybranego podzbioru pasującej wartości w kolumnie_2.

Poniższy kod działa, a dane wyjściowe dodają „w” przed napisami w wyborze podzbioru.

'w' + df[(df.column_2 == 'af')]['column_1'].astype(str)

Ten kod generuje żądany wynik dla wybranych kolumn. Tam, gdzie poniższy kod powinien zastosować go do df, wydaje się, że nie dodaje „w” do podzbioru ramki danych.

df[(df.column_2 == 'af')]['column_1'] = 'w' + df[(df.column_2 == 'af')]['column_1'].astype(str)

Czego tu brakuje?

2
tivoo 7 kwiecień 2020, 14:43

2 odpowiedzi

Najlepsza odpowiedź

Użyj DataFrame.loc aby uniknąć indeksowania łańcuchowego po obu stronach:

m = (df.column_2 == 'af')
df.loc[m, 'column_1'] = 'w' + df.loc[m, 'column_1'].astype(str)
1
jezrael 7 kwiecień 2020, 11:45
df.loc[df.column_2 == 'af', 'column_1'] = 'w' + df[df.column_2 == 'af'].column_1
1
Tom Ron 7 kwiecień 2020, 11:47