2015-02-17 41 views
7

Tôi có một khung dữ liệu đầy đủ ngày và tôi muốn chọn tất cả các ngày có tháng == 12 và ngày == 25 và thêm số 0 vào cột xmas a 1.Pandas: chọn tất cả các ngày có tháng và ngày cụ thể

Dù sao để làm điều này? dòng thứ hai của lỗi mã của tôi.

df = DataFrame({'date':[datetime(2013,1,1).date() + timedelta(days=i) for i in range(0,365*2)], 'xmas':np.zeros(365*2)}) 

df[df['date'].month==12 and df['date'].day==25] = 1 
+0

Bạn muốn điều này: 'df.loc [(. Df [ 'ngày'] tháng == 12) & (. Df [ 'ngày'] ngày == 25), 'giáng'] = 1' – EdChum

Trả lời

9

Về cơ bản những gì bạn đã cố gắng sẽ không làm việc như bạn cần phải sử dụng & để so sánh mảng, bổ sung bạn cần phải sử dụng dấu ngoặc do được ưu tiên điều hành. Ngày đầu này, bạn nên sử dụng loc để thực hiện việc lập chỉ mục:

df.loc[(df['date'].month==12) & (df['date'].day==25), 'xmas'] = 1 
+0

Trải nghiệm của tôi đã cho tôi một lỗi về tên cột nhưng tôi chỉ sử dụng 'df.index' thay cho' df ['date'] 'và sau đó nó hoạt động như bạn đã hiển thị. – Dave

3

Pandas Series với datetime giờ hoạt động khác. Xem .dt accessor.

df.loc[(df['date'].dt.day==25) & (cust_df['date'].dt.month==12), 'xmas'] = 1 
Các vấn đề liên quan