标题复杂,但问题很简单。我有一个具有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')
答案 0 :(得分:2)
好像您需要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
答案 1 :(得分:2)
您可以尝试以下方法:
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