2016-04-01 38 views
0

Fareler üzerinde MultiIndex içeren bir Pandas DataFrame ürünüm var. Satırları, birden çok ölçüt temelinde dizin düzeylerinden birinin değerine göre nasıl silebilirim? ÖrneğinSatır pandalarını sil Endeks temelli veri mimarisi (birden çok ölçüt) (Python 3.5.1)

, ben endeksinin county seviyesi NaN tüm satırları silmek ve onu 'D' ve 'G' eşit olduğu zaman da onu silmek istiyor ben

import pandas as pd 

df = {'population': [100, 200, 300, 400, 500, 600, 700, 800]} 
arrays = [['NJ', 'NJ', 'NY', 'NY', 'CA', 'CA', 'NV', 'NV'], 
      ['A', 'B', None, 'D', 'E', 'F', None, 'G']] 
tuples = list(zip(*arrays)) 
index = pd.MultiIndex.from_tuples(tuples, names=['state', 'county']) 

df = pd.DataFrame(df, index=index) 

        population 
state county 
NJ  A   100 
      B   200 
NY  NaN  300 
      D   400 
CA  E   500 
      F   600 
NV  NaN  700 
      G   800 

olduğunu varsayalım. Başka bir deyişle, bir DataFrame

    population 
state county 
NJ  A   100 
      B   200 
      D   400 
CA  E   500 
      F   600 

eser Yani şu tür ile bitirmek istiyorum:

df = df.iloc[df.index.get_level_values('county') != 'D'] 
df = df.iloc[df.index.get_level_values('county') != 'G'] 

Ama sorun benim gerçek kullanım durumunda bu ölçütlerin birkaç olmasıdır. Ayrıca, bu yöntemi kullanarak NaN'leri silmek için bir yol bulamıyorum.

Teşekkürler!

cevap

0

Çağrı drop ve level='county üzerinde bir liste geçmesini endeks düzeyde bu değerlerle satır etiketlerini düşmesi:

In [284]: 
df.drop(['D','G',np.NaN], level='county') 

Out[284]: 
       population 
state county    
NJ A    100 
     B    200 
CA E    500 
     F    600 
0

Sen boolean endeksleme üzerinde ters operatörü (~) kullanarak deneyebilirsiniz.

Örneğin, bu kod satırı diyor

import numpy as np 
df[~(df.index.get_level_values('county').isin(['A', 'B', np.nan]))] 

"ilçe bazı listede DEĞİL nerede df seçim"

İlgili konular