Python Pandas: 检查列表中的项目是否在 df 索引中
Python Pandas: check if items from list is in df index
我有一个数据框:
data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions'],
'wins': ['11102', '8425', '12%', '15%', '11%', '6%', '20%', '4%'],
'losses': ['5222', '8888', '6%', '1%', '5%', '30%', '6%', '12%'],
}
football = pd.DataFrame(data, index=['a','b','c','d','e','f','g','ssa'], columns=['year', 'team', 'wins', 'losses'])
我也有一个列表:
fixed_cats = ['d','g','ssa']
我想检查是否在 df 索引的底部找到了 fixed_cats 列表中的项目。
这是我失败的尝试:
football.loc[football.index[-len(fixed_cats):].isin(fixed_cats)]
出于某种原因,这个 returns 一个索引为 ['b','c'] 的 df。
预期输出:
索引为'g'和'ssa'
的df
您在第一次尝试时看到 ['b','c']
的原因是从内部 isin
返回的是 [False, True, True]
的布尔索引,您正在将其应用于 df开头,您需要将它重新应用到最后 3 行:
In [21]:
fixed_cats = ['d','g','ssa']
football[-len(fixed_cats):][football.index[-len(fixed_cats):].isin(fixed_cats)]
Out[21]:
year team wins losses
g 2011 Lions 20% 6%
ssa 2012 Lions 4% 12%
In [22]:
football.index[-len(fixed_cats):].isin(fixed_cats)
Out[22]:
array([False, True, True], dtype=bool)
所以上面的布尔索引需要应用到最后 3 行,而不是再次应用到整个 df,这就是你正在做的
我有一个数据框:
data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions'],
'wins': ['11102', '8425', '12%', '15%', '11%', '6%', '20%', '4%'],
'losses': ['5222', '8888', '6%', '1%', '5%', '30%', '6%', '12%'],
}
football = pd.DataFrame(data, index=['a','b','c','d','e','f','g','ssa'], columns=['year', 'team', 'wins', 'losses'])
我也有一个列表:
fixed_cats = ['d','g','ssa']
我想检查是否在 df 索引的底部找到了 fixed_cats 列表中的项目。
这是我失败的尝试:
football.loc[football.index[-len(fixed_cats):].isin(fixed_cats)]
出于某种原因,这个 returns 一个索引为 ['b','c'] 的 df。
预期输出:
索引为'g'和'ssa'
的df您在第一次尝试时看到 ['b','c']
的原因是从内部 isin
返回的是 [False, True, True]
的布尔索引,您正在将其应用于 df开头,您需要将它重新应用到最后 3 行:
In [21]:
fixed_cats = ['d','g','ssa']
football[-len(fixed_cats):][football.index[-len(fixed_cats):].isin(fixed_cats)]
Out[21]:
year team wins losses
g 2011 Lions 20% 6%
ssa 2012 Lions 4% 12%
In [22]:
football.index[-len(fixed_cats):].isin(fixed_cats)
Out[22]:
array([False, True, True], dtype=bool)
所以上面的布尔索引需要应用到最后 3 行,而不是再次应用到整个 df,这就是你正在做的