Chừng nào bạn có thể phân loại một bước như cái gì mà trả về một DataFrame, và mất một DataFrame (với các đối số có thể nhiều hơn), sau đó bạn có thể sử dụng pipe
. Cho dù có một lợi thế để làm như vậy, là một câu hỏi khác.
Ở đây, ví dụ, bạn có thể sử dụng Thông báo
df\
.pipe(lambda df_, x, y: df_[(df_.a >= x) & (df_.b <= y)], 2, 8)\
.pipe(lambda df_: df_.groupby(df_.x))\
.mean()
cách giai đoạn đầu tiên là một lambda mà mất 3 đối số, với 2 và 8 thông qua như là tham số. Đó không phải là cách duy nhất để làm như vậy - nó tương đương với
.pipe(lambda df_: df_[(df_.a >= 2) & (df_.b <= 8)])\
Cũng lưu ý rằng bạn có thể sử dụng
df\
.pipe(lambda df_, x, y: df[(df.a >= x) & (df.b <= y)], 2, 8)\
.groupby('x')\
.mean()
Ở đây lambda mất df_
, nhưng hoạt động trên df
, và lần thứ hai pipe
đã được thay thế bằng groupby
.
Thay đổi đầu tiên hoạt động ở đây, nhưng là gragile. Nó xảy ra để hoạt động vì đây là giai đoạn đầu tiên đường ống đầu tiên. Nếu nó sẽ là một giai đoạn sau, nó có thể mất một DataFrame với một chiều, và cố gắng để lọc nó trên một mặt nạ với kích thước khác, ví dụ.
Thay đổi thứ hai là tốt. Đối mặt, tôi nghĩ nó dễ đọc hơn. Về cơ bản, bất cứ điều gì mà có một DataFrame và trả về một, có thể được gọi trực tiếp hoặc thông qua pipe
.
Nguồn
2016-02-28 19:58:24
Tôi không thấy lý do tại sao sử dụng 'pipe' sẽ hữu ích ở đây. 'df [(df.a> = 2) & (df.b <= 8)]. groupby ('x'). mean()' sẽ làm điều tương tự, đúng không? – jme
đó là sự thật @ jme, đây là một ví dụ đồ chơi và trong mã lớn hơn của tôi, tôi có nhiều bước hơn. Cộng với toán tử '.' làm cho mọi thứ trông gọn gàng hơn. – user308827
Đây là một trong hai deja vu hoặc [duplicate] (http://stackoverflow.com/questions/35045805) :-) – Primer