2016-04-13 10 views
5

Tôi có một dữ liệu-frame với nhiều chỉ số như thế này:gấu trúc đa-index như thế nào để che dấu dữ liệu bằng cách cấp độ thứ hai

Date  Period  Value \n 
20130101 0   12 \n 
20130101 1   13 
20130102 0   13 
20130102 1   14 

Mức đầu tiên là ngày và mức độ thứ hai là thời kỳ. Tôi muốn thiết lập các giá trị mà thời gian không zero zero là, sản lượng sẽ là một cái gì đó như thế này:

Date  Period  Value 
20130101 0   12 
20130101 1   0 
20130102 0   13 
20130102 1   0 

Nếu mức thứ hai là một cột như trái ngược với chỉ số, giải pháp sẽ được dễ dàng df.Value.loc[df.Period == 0] =0.

Có cách nào để đạt được điều này, chỉ bằng cách sử dụng chỉ mục?

Trả lời

2

thử điều này:

df.loc[df.index.get_level_values('Period') != 0, 'Value'] = 0 

Giải thích:

In [5]: df 
Out[5]: 
       Value 
Date  Period 
20130101 0   12 
     1   13 
20130102 0   13 
     1   14 

In [6]: df.index.get_level_values('Period') 
Out[6]: Int64Index([0, 1, 0, 1], dtype='int64', name='Period') 

In [7]: df.index.get_level_values('Period') != 0 
Out[7]: array([False, True, False, True], dtype=bool) 

In [8]: df[df.index.get_level_values('Period') != 0] 
Out[8]: 
       Value 
Date  Period 
20130101 1   13 
20130102 1   14 

In [9]: df.loc[df.index.get_level_values('Period') != 0, 'Value'] = 0 

In [10]: df 
Out[10]: 
       Value 
Date  Period 
20130101 0   12 
     1   0 
20130102 0   13 
     1   0 
Các vấn đề liên quan