我有一个pandas数据框,我想通过传递一个名称列表作为索引1和index2来获得它的一部分:
这是我的数据框示例:
| index1 | index2 | |
|-----------------------------|
| chicago | rome | 0.22 |
| berlin | praha | 1.22. |
...
我想获得一个新的数据框,它只包含index1和index2在城市列表中的元组。
如果我这样做:
df.loc['chicago', 'rome']
我得到0.22
,但是我想传递index1和2中的城市列表:
df.loc[list_ofCities1, list_ofCities2]
大熊猫有什么办法吗?
答案 0 :(得分:0)
您很亲密,一对需要tuples
:
df.loc[('chicago', 'rome')]
要检查多个值,请使用Index.isin
和MultiIndex.get_level_values
:
m1 = df.index.get_level_values(0).isin(list_ofCities1)
m2 = df.index.get_level_values(1).isin(list_ofCities2)
df = df[m1 & m2]
或Index.isin
和带有boolean indexing
的元组列表:
df = df.loc[df.index.isin(list(zip(list_ofCities1, list_ofCities2)))]
示例:
df = pd.DataFrame({
'A':list('abcdec'),
'E':[5,3,6,9,2,4],
'F':list('aaabgg')
}).set_index(['A','F'])['E']
list_ofCities1 = list('abc')
list_ofCities2 = list('ang')
df = df[df.index.isin(list(zip(list_ofCities1, list_ofCities2)))]
print (df)
A F
a a 5
c g 4
Name: E, dtype: int64
另一个想法是将Index.intersection
与loc
一起使用:
df = df.loc[df.index.intersection(list(zip(list_ofCities1, list_ofCities2)))]
print (df)
A F
a a 5
c g 4
Name: E, dtype: int64