Nếu trục là Đa chỉ số (phân cấp), hãy đếm dọc theo một mức cụ thể, thu gọn thành vô hướng Show Không dùng nữa kể từ phiên bản 1. 3. 0. Từ khóa cấp độ không được dùng nữa. Sử dụng nhóm để thay thế. numeric_only bool, mặc định Không cóChỉ bao gồm các cột float, int, boolean. Nếu Không, sẽ cố gắng sử dụng mọi thứ, sau đó chỉ sử dụng dữ liệu số. Không được triển khai cho Sê-ri Không dùng nữa kể từ phiên bản 1. 5. 0. Chỉ định 2 không được dùng nữa. Giá trị mặc định sẽ là 3 trong phiên bản tương lai của pandas. min_count int, mặc định 0Số lượng giá trị hợp lệ cần thiết để thực hiện thao tác. Nếu có ít hơn 4 giá trị không phải NA thì kết quả sẽ là NA**kwargsCác đối số từ khóa bổ sung được chuyển đến hàm Trả về vô hướng hoặc Sê-ri (nếu mức được chỉ định)Xem thêm Trả lại tổng Trả lại mức tối thiểu Trả lại tối đa Trả về chỉ số tối thiểu Trả về chỉ số tối đa Trả về tổng trên trục được yêu cầu Trả lại giá trị tối thiểu trên trục được yêu cầu Trả lại số tiền tối đa trên trục được yêu cầu Trả về chỉ số tối thiểu trên trục được yêu cầu Trả về chỉ số tối đa trên trục được yêu cầu ví dụ >>> idx = pd.MultiIndex.from_arrays([ .. ['warm', 'warm', 'cold', 'cold'], .. ['dog', 'falcon', 'fish', 'spider']], .. names=['blooded', 'animal']) >>> s = pd.Series([4, 2, 0, 8], name='legs', index=idx) >>> s blooded animal warm dog 4 falcon 2 cold fish 0 spider 8 Name: legs, dtype: int64 >>> s.sum() 14 Theo mặc định, tổng của một Sê-ri trống hoặc toàn NA là >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.00 >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.0 Điều này có thể được kiểm soát bằng tham số 4. Ví dụ: nếu bạn muốn tổng của một chuỗi trống là NaN, hãy vượt qua >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.02 á ha. Đầu ra ví dụ của bạn cho thấy kết quả 6. Sử dụng các chỉ mục dựa trên 1 (phổ biến trong một số thử thách lập trình nhất định), 7 có trong danh sách phụ đó các giá trị 8 có tổng là 9, gần với giá trị mục tiêu của 0. Tôi đang xem 0 và nghĩ rằng tôi đang xem một lỗi vì nó sẽ bỏ qua một danh sách phụ có tổng cộng chính xác là 0 vì quá lớn"Đầu vào rất đơn giản" của bạn thực sự gây nhầm lẫn, vì sức mạnh và chỉ số của máy chủ không phải là các giá trị khác biệt. Tương tự, thứ tự được sắp xếp không đưa ra dấu hiệu rõ ràng về việc các chỉ số dựa trên 0 hay 1 được trả về Việc thiếu các nhận xét hay, một tuyên bố vấn đề không thể truy cập và mã khó hiểu khiến cho việc xác định mục đích của mã đó là gì, điều này khiến cho việc "xem lại mã" trở thành một nhiệm vụ khó khăn và dễ mắc lỗi Bây giờ tôi đã hiểu chuyện gì đang xảy ra, hãy làm cả hai. xem lại mã và tối ưu hóa nó đặt tênCác hàm và biến của bạn là sự kết hợp giữa các tên dễ hiểu ( 2 và 3) và các tên hoàn toàn mờ đục không truyền đạt bất kỳ ý nghĩa nào ( 4 và 5)Toàn cầuCác biến toàn cầu có vị trí của chúng. Đây không phải là nó Hàm 6 không trả về gì, nhưng gọi ra 7 và 8 là các biến toàn cục mà nó sẽ đọc và ghi. Hóa ra nó cũng đang sửa đổi cả 9 và >>> s.sum() 1440 Nhiều khả năng là không, các biến 7 và 8 không nhất thiết phải là toàn cục và có thể đơn giản là được khởi tạo bằng 0 khi bắt đầu hàm. Ngoại trừ trường hợp nếu vòng lặp bên trong các máy chủ đến cuối vòng lặp mà không vượt quá >>> s.sum() 1443, thì 8 và 7 sẽ không bị xóa và lệnh gọi tiếp theo tới máy chủ sẽ tiếp tục tại nơi chúng đã dừng lại. Đây có phải là cố ý? Các tham số và biến không cần thiết>>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.01 Điểm của >>> s.sum() 1446 là gì? Hàm 4 yêu cầu đối số >>> s.sum() 1446, nhưng bất kỳ giá trị nào được cung cấp sẽ bị bỏ qua, bị ghi đè bởi >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.050 trước khi sử dụng Bên trong vòng lặp for, giá trị của >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.051 được lưu trữ trong >>> s.sum() 1446. Sau đó, cả >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.053 và >>> s.sum() 1446 đều không được sửa đổi bên trong phần thân của vòng lặp, cũng như không được sử dụng bên ngoài vòng lặp. >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.055 vẫn đúng miễn là cả hai biến đều nằm trong phạm vi. Điều này đặt ra câu hỏi về. tại sao lại sử dụng >>> s.sum() 1446 thay vì >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.051? Không xác định chức năng bên trong vòng lặpĐiều này thực sự có thể dẫn đến hành vi kỳ lạ
đầu ra >>> s.sum() 144 Viết để thử nghiệmNếu bạn đã cấu trúc mã của mình dưới dạng một chức năng giải quyết được sự cố và sử dụng trình bảo vệ chính để chạy mã khi được gửi tới trang web thử thách lập trình >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.05 sau đó bạn có thể viết một chương trình thử nghiệm chạy các trường hợp mẫu, chẳng hạn như >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.06 Có các khung kiểm tra giúp kiểm tra dễ dàng hơn. Nhìn vào pytest, unittest và doctest. Những thứ đó sẽ giúp bạn bắt đầu, nhưng có nhiều thứ khác bạn có thể thử một phần tiềnBất cứ khi nào bạn gặp một vấn đề mà bạn đang cộng một dãy số, bắt đầu và kết thúc tại các điểm khác nhau, bạn nên dừng lại và hỏi xem có cách nào tốt hơn không Trong ví dụ của bạn, bạn có các số >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.058 và trước tiên bạn bắt đầu với >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.059, sau đó là >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.060, sau đó là >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.061, v.v., cho đến khi bạn có tổng số là >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.062 hoặc >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.063. Sau đó, bạn đặt lại và bắt đầu >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.064, >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.065, >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.066, v.v. cho đến khi bạn đạt được >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.067 hoặc >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.068. Sau đó, bạn đặt lại và bắt đầu từ >>> pd.Series([], dtype="float64").sum() # min_count=0 is the default 0.069 và tính toán 60, 61, 62, 63 hoặc 64. Sau đó, bạn đặt lại và bắt đầu 65, 66, ________ 567, ________ 568, ________ 569 hoặc ________ 570Đã bao nhiêu lần bạn cộng 4 và 5 lại với nhau? . Không nhiều. Nhưng đây là một ví dụ chỉ có 10 máy chủ. Bạn có thể có một trăm nghìn máy chủ và ngưỡng sức mạnh khá cao để vượt quá. Bạn có thể thêm hàng nghìn lần một giá trị máy chủ cụ thể vào tổng số lần trước đó và vì bạn có thể có hàng nghìn giá trị máy chủ riêng lẻ, nên bạn có thuật toán \$O(N^2)\$ Thay vào đó, hãy xem xét tổng số giá trị đang chạy. 71. Chúng tôi đã thêm giá trị máy chủ vào tổng số trước đó chính xác một lần. Từ danh sách đó, bạn có thể lấy tổng của bất kỳ danh sách con máy chủ nào. Chẳng hạn, tổng giá trị máy chủ từ chỉ mục 6 đến chỉ mục 8 sẽ là tổng giá trị máy chủ cho đến chỉ mục 8, 72, trừ đi tổng giá trị máy chủ cho đến chỉ số 5, 9. 74. Sau khi xử lý danh sách N máy chủ, thực hiện tổng cộng N phép cộng, bạn có thể lấy tổng của bất kỳ danh sách con nào với nhiều nhất một phép trừĐiều này nghe có vẻ thú vị, nhưng điều này không thực sự cải thiện bất cứ điều gì. Sử dụng các bước tương tự ở trên, thuật toán sẽ vẫn bắt đầu bằng 75, 76, 77, 78, 79, 80, 81, sau đó đặt lại thành 82, 83, 84, 85, 86, 87, sau đó đặt lại thành 88, tối đa là 89, . Thay vì thực hiện một phép cộng trên mỗi bước lặp, chúng tôi đang thực hiện một phép trừ trên mỗi bước lặpTại sao phải reset lại từ đầu?Sau khi thêm các giá trị công suất của máy chủ cho đến khi bạn vượt quá yêu cầu, tại sao phải đặt lại trình tự và đi lên lại ngưỡng?
Ngắn gọn hơn,
Lưu ý rằng chúng ta chỉ di chuyển điểm bắt đầu và điểm kết thúc qua danh sách một lần. Đây là \$O(N)\$ chạy tổng sốBạn không phải tính toán trước và lưu trữ tổng số đang chạy. Bạn chỉ có thể giữ hai tổng số đang chạy khi bạn di chuyển điểm bắt đầu và điểm kết thúc về phía trước Bạn thậm chí không cần hai tổng số. Chỉ cần cộng hoặc trừ từ một tổng số đang chạy. Hoặc xem xét tổng số là 00 và khởi tạo nó với giá trị âm của yêu cầu năng lượng. Khi 01, yêu cầu năng lượng được đáp ứng; |