Giả sử tôi có khung dữ liệu sau và tôi muốn thay đổi hai thành phần trong cột c
tương ứng với hai phần tử đầu tiên trong cột a
bằng 1
bằng 2
.Sử dụng loc và iloc với nhau trong gấu trúc
>>> 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
Mã trong dòng thứ hai không hoạt động vì iloc đặt bản sao, do đó khung dữ liệu gốc không bị sửa đổi. Làm thế nào tôi sẽ làm điều này?
Tôi không nghĩ rằng điều này là bẩn! Đây là một ví dụ về một lớp cắt, vị trí của nó nằm dọc theo một trục và theo chỉ mục trên một trục khác. – piRSquared
Tôi đã có thể lưu một char: 'df.loc [df.index [df.a == 1] [: 2], 'c'] = 2' – piRSquared
@piRSquared Tôi thường không thích sự lặp lại trong' df [df [col] == some_value] 'cú pháp và ở đây nó trở thành' df [df [df ['... Đó là lý do tại sao tôi gọi nó là bẩn. :) – ayhan