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

复杂的标题,但很简单的问题。我有一个带有 MultiIndex 的 DataFrame:

http://img.mukewang.com/611b23400001e7e602470111.jpg

我想要上面框架的行,但'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')


潇湘沐
浏览 164回答 2
2回答

回首忆惘然

看起来你需要get_level_values+ map,然后使用值比较得到 df 的布尔过滤器df[df['Filter Column'].values>=df.index.get_level_values(0).map(filter_value)]Out[108]:              Value  Filter ColumnColor Count                      red   2          2              1blue  2          2              3      3          2              4

猛跑小猪

你可以试试这个: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  filterColor Count                              red   2          2              1       1blue  2          2              3       3      3          2              4       3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python