Say mam następujący dataframe i chcę, aby zmienić dwa elementy w kolumnie c
które odpowiadają dwóch pierwszych elementów w kolumnie a
które są równe 1
równa 2
.Zastosowanie loc i iloc razem w pand
>>> df = pd.DataFrame({"a" : [1,1,1,1,2,2,2,2], "b" : [2,3,1,4,5,6,7,2], "c" : [1,2,3,4,5,6,7,8]})
>>> df.loc[df["a"] == 1, "c"].iloc[0:2] = 2
>>> df
a b c
0 1 2 1
1 1 3 2
2 1 1 3
3 1 4 4
4 2 5 5
5 2 6 6
6 2 7 7
7 2 2 8
Kod w drugiej linii nie działa, ponieważ iloc zestawy kopii, więc oryginalny dataframe nie jest modyfikowany. Jak to zrobić?
Nie sądzę, że to jest brudne! Jest to przykład klasy krojenia, w której jest pozycjonowana wzdłuż jednej osi, a według indeksu z drugiej. – piRSquared
Udało mi się zapisać jeden znak: 'df.loc [df.index [df.a == 1] [: 2], 'c'] = 2' – piRSquared
@piRSquared Generalnie nie podoba mi się powtórzenie w' df [df [col] == some_value] 'składnia i tutaj staje się' df [df [df [... ... Dlatego nazwałem to brudne. :) – ayhan