Tại sao sử dụng Tiếng vang == Lần lại trả về Sê-ri thay vì bool trong gấu trúc?


8

Tôi chỉ không thể hiểu "==" nghĩa là gì ở dòng thứ hai:
- Đây không phải là một thử nghiệm, không có câu lệnh if ...
- Đây không phải là một tuyên bố biến ...

Tôi chưa bao giờ thấy điều này trước đây, điều này data.ctage==catlà một loạt gấu trúc và không phải là một thử nghiệm ...

for cat in data["categ"].unique():
    subset = data[data.categ == cat] # Création du sous-échantillon
    print("-"*20)
    print('Catégorie : ' + cat)
    print("moyenne:\n",subset['montant'].mean())
    print("mediane:\n",subset['montant'].median())
    print("mode:\n",subset['montant'].mode())
    print("VAR:\n",subset['montant'].var())
    print("EC:\n",subset['montant'].std())
    plt.figure(figsize=(5,5))
    subset["montant"].hist(bins=30) # Crée l'histogramme
    plt.show() # Affiche l'histogramme

1
Có lẽ họ đang thực hiện một so sánh phần tử khôn ngoan của hai mảng numpy và sử dụng mảng boolean kết quả làm công cụ chọn dữ liệu? stackoverflow.com/questions/10580676/ Pandas thật kỳ lạ.
Neil

1
Nó là một mặt nạ như positive_X = X[X > 0]từ numpy.
Hướng dẫn

Câu trả lời:


10

Nó đang thử nghiệm từng yếu tố data.categcho sự bình đẳng với cat. Điều đó tạo ra một vectơ các giá trị Đúng / Sai. Điều này được truyền như trong bộ chỉ mục tới data[], trả về các hàng từ datađó tương ứng với các giá trị True trong vectơ.

Để tóm tắt, toàn bộ biểu thức trả về tập hợp con của các hàng từ datađó giá trị data.categbằng cat.

(Có vẻ như toàn bộ hoạt động có thể được thực hiện bằng cách sử dụng thanh lịch hơn data.groupBy('categ').apply(someFunc).)


2

Nó tạo ra một chuỗi boolean với các chỉ mục có giá trị data.categbằng cat, với mặt nạ boolean này, bạn có thể lọc khung dữ liệu của mình, nói cách khác subsetsẽ có tất cả các bản ghi trong đó categgiá trị được lưu trữ trong đó cat.

Đây là một ví dụ sử dụng dữ liệu số

np.random.seed(0)
a = np.random.choice(np.arange(2), 5)
b = np.random.choice(np.arange(2), 5)
df = pd.DataFrame(dict(a = a, b = b))


df[df.a == 0].head()

#   a   b
# 0 0   0
# 2 0   0
# 4 0   1

df[df.a == df.b].head()

#   a   b
# 0 0   0
# 2 0   0
# 3 1   1

2

Vâng, nó một bài kiểm tra. Biểu thức Boolean không bị hạn chế đối với các ifcâu lệnh.

Dường như datalà một khung dữ liệu (PANDAS). Biểu thức được sử dụng làm chỉ mục khung dữ liệu là cách PANDAS biểu thị bộ chọn hoặc bộ lọc. Điều này nói rằng chọn tất cả các hàng trong đó fieled categkhớp với biến cat(rõ ràng là một biến được xác định trước). Bộ sưu tập các hàng này trở thành một khung dữ liệu mới , subset.


2

data.categ == catsẽ trả về một danh sách boolean sẽ được sử dụng để lọc khung dữ liệu của bạn bằng cách chỉ để lại các giá trị trong đó boolean bằng nhau True.

Booleans được sử dụng trong nhiều tình huống, không chỉ trong các ifcâu lệnh.


2

Ở đây bạn đang kiểm tra data.categvới phần tử lặp cat, trong từ điển của data.
Và nếu chúng bằng nhau, bạn đang tiếp tục vòng lặp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.