2015-01-26 33 views
5

câu hỏi khá cơ bản, nhưng đã tự hỏi:Python, Pandas: trung bình mỗi 2 hàng cùng

cách 'đúng' để trung bình mỗi 2 hàng với nhau trong gấu trúc Dataframe, và do đó kết thúc với chỉ một nửa số là gì hàng?

Lưu ý rằng điều này khác với rolling_mean vì nó làm giảm số lượng mục nhập.

Trả lời

4

Một cách nhanh chóng để làm điều đó:

>>> s = pd.Series(range(10)) 
>>> s 
0 0 
1 1 
2 2 
3 3 
4 4 
5 5 
6 6 
7 7 
8 8 
9 9 
>>> ((s + s.shift(-1))/2)[::2] 
0 0.5 
2 2.5 
4 4.5 
6 6.5 
8 8.5 

Các "cách thích hợp" Tôi đoán sẽ là một cái gì đó như:

>> a = s.index.values 
>>> idx = np.array([a, a]).T.flatten()[:len(a)] 
>>> idx 
[0 0 1 1 2 2 3 3 4 4] 
>>> s.groupby(idx).mean() 
0 0.5 
2 2.5 
4 4.5 
6 6.5 
8 8.5 

Nhưng nó là ~ 2x chậm hơn và trở nên tồi tệ hơn với kích thước ngày càng tăng.

+0

tốt, cảm ơn, tôi thích cách nhanh chóng. nó tổng quát tốt cho nhiều hàng trung bình – AimForClarity

+0

Cách 'thích hợp' của bạn, hoặc phiên bản của nó bằng cách sử dụng danh sách trở nên cần thiết khi tính trung bình hoặc tổng hợp các hàng '' 'n''', trừ khi có cách xử lý thay đổi tùy ý hơn' ' 'n''' – SpmP

Các vấn đề liên quan