2013-06-07 30 views
19

Tôi đang gặp khó khăn khi tìm cách để thực hiện tối thiểu yếu tố hiệu quả tối thiểu của hai đối tượng Series trong gấu trúc. Ví dụ tôi có thể thêm hai dòng dễ dàng đủ:Tạo một chuỗi tối thiểu yếu tố khôn ngoan từ hai Series khác trong Python Pandas

In [1]: 
import pandas as pd 
s1 = pd.Series(data=[1,1,1], index=[1,2,3]) 
s2 = pd.Series(data=[1,2,2,1], index=[1,2,3,4]) 
s1.add(s2)  
Out[1]: 
1  2 
2  3 
3  3 
4 NaN 
dtype: float64 

Nhưng tôi không thể tìm thấy một cách hiệu quả để làm một tối thiểu yếu tố khôn ngoan giữa hai Series (cùng với việc sắp xếp các chỉ số và xử lý các giá trị NaN).

Nevermind. Có một cửa thoát với kết hợp chức năng để bạn có thể đặt ở bất kỳ chức năng yếu tố khôn ngoan:

In [2]: 
s1 = pd.Series(data=[1,1,1], index=[1,2,3]) 
s2 = pd.Series(data=[1,2,2,1], index=[1,2,3,4]) 
s1.combine(s2, min, 0) 
Out[2]: 
1 1 
2 1 
3 1 
4 0 
dtype: int64 
+4

Tôi nghĩ bạn nên thêm chút sau "nevermind" như một câu trả lời, chứ không phải là ở phần cuối của câu hỏi (tôi muốn upvote) ... Mặc dù tôi không đồng ý rằng 'min (1, NaN) == 0' .... –

Trả lời

17

Cách đơn giản nhất mà tôi có thể thấy là để làm cho họ thành một DataFrame và sau đó lấy phút hàng khôn ngoan :

>>> print pandas.concat([s1, s2], axis=1).min(axis=1) 
1 1 
2 1 
3 1 
4 1 
dtype: float64 
+1

Trên gấu trúc 0,19.2 này nhanh hơn các cách khác bởi hơn ba đơn đặt hàng của độ lớn –

16

Một cách tương tự:

In [11]: pd.DataFrame([s1, s2]).min() 
Out[11]: 
1 1 
2 1 
3 1 
4 1 
dtype: float64 
+3

Điều này chỉ hoạt động đối với tôi trên gấu trúc 0,17 nếu tôi gọi 'phút (trục = 1)' – ihadanny

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