Tôi đang tìm cách thực hiện một số chức năng như rolling_*
khác nhau của pandas
, nhưng tôi muốn cửa sổ tính toán cán được xác định bởi một dải giá trị (nói, một loạt các giá trị của một cột của DataFrame), không phải bởi số hàng trong cửa sổ.Tính toán cán gấu trúc với cửa sổ dựa trên giá trị thay vì đếm
Như một ví dụ, giả sử tôi có dữ liệu này:
>>> print d
RollBasis ToRoll
0 1 1
1 1 4
2 1 -5
3 2 2
4 3 -4
5 5 -2
6 8 0
7 10 -13
8 12 -2
9 13 -5
Nếu tôi làm điều gì đó như rolling_sum(d, 5)
, tôi nhận được một số tiền cán trong đó mỗi cửa sổ chứa 5 hàng. Nhưng những gì tôi muốn là một tổng số cán trong đó mỗi cửa sổ chứa một phạm vi nhất định các giá trị của RollBasis
. Tức là, tôi muốn có thể làm điều gì đó như d.roll_by(sum, 'RollBasis', 5)
và nhận được kết quả khi cửa sổ đầu tiên chứa tất cả các hàng có RollBasis
nằm trong khoảng từ 1 đến 5, sau đó cửa sổ thứ hai chứa tất cả các hàng có RollBasis
nằm trong khoảng từ 2 đến 6, sau đó cửa sổ thứ ba chứa tất cả các hàng có RollBasis
nằm trong khoảng từ 3 đến 7, vv Cửa sổ sẽ không có số hàng bằng nhau, nhưng phạm vi giá trị RollBasis
được chọn trong mỗi cửa sổ sẽ giống nhau. Vì vậy, sản lượng nên được như:
>>> d.roll_by(sum, 'RollBasis', 5)
1 -4 # sum of elements with 1 <= Rollbasis <= 5
2 -4 # sum of elements with 2 <= Rollbasis <= 6
3 -6 # sum of elements with 3 <= Rollbasis <= 7
4 -2 # sum of elements with 4 <= Rollbasis <= 8
# etc.
Tôi không thể làm điều này với groupby
, vì groupby
luôn luôn tạo nhóm rời nhau. Tôi không thể làm điều đó với các chức năng cán, bởi vì cửa sổ của họ luôn luôn cuộn theo số hàng, không phải bởi các giá trị. Vậy làm thế nào tôi có thể làm điều đó?
Cảm ơn, điều đó có vẻ như vậy. Tôi đã thêm câu trả lời của riêng mình với một phiên bản tổng quát hơn về điều này, nhưng tôi chấp nhận câu trả lời của bạn. – BrenBarn