基于索引删除数据帧中的行(多个条件)(Python 3.5.1)
假设我有一个数据帧,行上有多个索引。如何根据基于多个条件的索引级别之一的值删除行 例如,假设我有基于索引删除数据帧中的行(多个条件)(Python 3.5.1),python,pandas,Python,Pandas,假设我有一个数据帧,行上有多个索引。如何根据基于多个条件的索引级别之一的值删除行 例如,假设我有 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']] tupl
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
我想删除索引的县
级别为NaN的所有行,并在它等于'D'和'G'时删除它。换句话说,我想以一个数据帧结束
population
state county
NJ A 100
B 200
D 400
CA E 500
F 600
因此,以下几类工作:
df = df.iloc[df.index.get_level_values('county') != 'D']
df = df.iloc[df.index.get_level_values('county') != 'G']
但问题是,在我的实际用例中,有几个标准。此外,我似乎找不到一种方法来删除南的使用这种方法
谢谢 在level='county
上调用并传递列表,以删除该索引级别上具有这些值的行标签:
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
您可以尝试在布尔索引上使用反向运算符(~)。比如说,
import numpy as np
df[~(df.index.get_level_values('county').isin(['A', 'B', np.nan]))]
这行代码表示“从df中选择县不在某些列表中”