【问题标题】:Python Pandas: check if items from list is in df indexPython Pandas:检查列表中的项目是否在 df 索引中
【发布时间】:2015-01-19 11:17:02
【问题描述】:

我有一个数据框:

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)]

由于某种原因,这会返回一个索引为 ['b','c'] 的 df。

预期输出:

索引为“g”和“ssa”的df

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您在第一次尝试中看到['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,这就是你正在做的事情

    【讨论】:

    • 谢谢埃德。这正是我想做的。我会努力记住这一点,以备不时之需!
    猜你喜欢
    • 2017-12-21
    • 2021-12-29
    • 2018-11-17
    • 2021-06-25
    • 2021-07-28
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多