为了账号安全,请及时绑定邮箱和手机立即绑定

按根据多索引级别而变化的值对列进行过滤

按根据多索引级别而变化的值对列进行过滤

潇湘沐 2021-08-17 10:46:36
复杂的标题,但很简单的问题。我有一个带有 MultiIndex 的 DataFrame:我想要上面框架的行,但'Filter Column'必须大于或等于filter_value下面系列中的值。filter_value = Series([1, 3], ['red', 'blue'])这个玩具问题的正确解决方案是相同的数据帧,但只剩下(red, 2),(blue, 2)和(blue, 3)行。要设置上述框架:arrays = [['red', 'red', 'blue', 'blue', 'blue'], [1, 2, 1, 2, 3]]idx = MultiIndex.from_arrays(arrays, names=['Color', 'Count'])values = Series(2, idx, name='Value')ratios = Series(range(5), idx, name='Filter Column')df = concat([values, ratios], axis='columns')
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

看起来你需要get_level_values+ map,然后使用值比较得到 df 的布尔过滤器


df[df['Filter Column'].values>=df.index.get_level_values(0).map(filter_value)]

Out[108]: 

             Value  Filter Column

Color Count                      

red   2          2              1

blue  2          2              3

      3          2              4


查看完整回答
反对 回复 2021-08-17
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

你可以试试这个:


pd.concat(df.align(filter_value.rename('filter'), level=0, axis=0), axis=1)\

  .loc[lambda x: x['Filter Column']>=x['filter']]

输出:


             Value  Filter Column  filter

Color Count                              

red   2          2              1       1

blue  2          2              3       3

      3          2              4       3


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号