我正在尝试过滤groupby()
已经产生的数据帧。分组数据框的示例如下:
all_dists less more
district answer
N yes 9.0 1.0
no 0.0 0.0
maybe 0.0 0.0
W yes 0.0 0.0
no 0.0 0.0
maybe 1.0 6.0
S yes 0.0 0.0
no 0.0 0.0
maybe 0.0 0.0
E yes 0.0 0.0
no 0.0 15.0
maybe 4.5 0.0
如果我过滤“是”和“更少”,则会得到理想的结果:
grouped_df.loc[(slice(None), slice('yes')), 'less']
>>>
all_dists less more
district answer
N yes 9.0 1.0
W yes 0.0 0.0
S yes 0.0 0.0
E yes 0.0 0.0
但是如果我过滤“否”或“也许”,那么它将随它一起携带前一行:
grouped_df.loc[(slice(None), slice('no')), 'less']
all_dists less more
district answer
N yes 9.0 1.0
no 0.0 0.0
W yes 0.0 0.0
no 0.0 0.0
S yes 0.0 0.0
no 0.0 0.0
E yes 0.0 0.0
no 0.0 15.0
我的目的是在过滤后的数据帧中计算总和,但是我似乎无法弄清楚切片有什么问题。
帮助,请^ _ ^
对于给定的样本,grouped_df.loc[(slice(None), slice('yes')), 'less']
和grouped_df.loc[(slice(None), slice('no')), 'less']
都给我错误:
UnsortedIndexError: 'MultiIndex slicing requires the index to be lexsorted: slicing on levels [1], lexsort depth 0'
另一方面,如果我这样做:
grouped_df = grouped_df.sort_index()
视情况而定,数据是groupby()
的结果,然后
grouped_df.loc[(slice(None), slice('yes')), 'less']
为我提供了整个数据框。如果要提取一个索引级别,则可能需要执行以下操作:
grouped_df.loc [(slice(None),'yes'),'less']
给出:
district answer
E yes 9
N yes 0
S yes 6
W yes 3
Name: less, dtype: int64
类似地,
grouped_df.loc[(slice(None), 'no'), 'less']
给予
district answer
E no 10
N no 1
S no 7
W no 4
Name: less, dtype: int64