我想切片Multiindex Dataframe。让我们以此df为例:
import pandas as pd
arrays = [['bar', 'bar', 'bar','bar', 'foo','foo', 'qux', 'qux',
'qux','qux', 'qux'],
['2', '3', '4','10', '3','10','2','3','6','10','11']]
df = pd.DataFrame(np.random.randn(11, 4), index=arrays).sort_index()
- >
0 1 2 3
bar 10 1.411962 -0.742729 0.950159 1.074269
2 1.214804 -0.654806 -1.138855 0.609101
3 0.135363 1.226927 -0.501535 -0.791849
4 1.118516 -1.340844 -1.365790 -0.099575
foo 10 -0.004108 -0.067574 -0.139101 -0.358282
3 0.612849 -0.598579 0.923299 -0.218198
qux 10 0.112769 -1.330163 2.195480 -0.347462
11 0.057467 -0.204044 0.020474 -1.198299
2 1.011604 -0.411514 0.941112 -0.509703
3 0.524958 -0.855275 0.257481 0.630311
6 1.989778 -0.099014 0.302340 -0.067559
现在我想得到第二个索引有一些值的行。所以我想说我只想要第二个索引包含' 2' AND' 3'和' 10',所以我可以这样做:
sliced = df.loc[(slice(None), ['2','3','10']), :]
产生:
0 1 2 3
bar 10 1.411962 -0.742729 0.950159 1.074269
2 1.214804 -0.654806 -1.138855 0.609101
3 0.135363 1.226927 -0.501535 -0.791849
foo 10 -0.004108 -0.067574 -0.139101 -0.358282
3 0.612849 -0.598579 0.923299 -0.218198
qux 10 0.112769 -1.330163 2.195480 -0.347462
2 1.011604 -0.411514 0.941112 -0.509703
3 0.524958 -0.855275 0.257481 0.630311
但我不希望这行包含[' 10',' 3']。所以期望的结果将是:
0 1 2 3
bar 10 1.411962 -0.742729 0.950159 1.074269
2 1.214804 -0.654806 -1.138855 0.609101
3 0.135363 1.226927 -0.501535 -0.791849
qux 10 0.112769 -1.330163 2.195480 -0.347462
2 1.011604 -0.411514 0.941112 -0.509703
3 0.524958 -0.855275 0.257481 0.630311
我试过但我无法理解如何妥善解决这个问题。任何帮助是极大的赞赏。
答案 0 :(得分:0)
正如COLDSPEED所说,似乎不可能抛出纯粹的索引。 但是,您可以通过groupby语句在几个步骤中完成此操作。 如果我们再次使用您的代码
>>> mask = sliced.groupby(level=0)[0].count() == len(col_list)
>>> sliced[mask[sliced.index.get_level_values(0)].values]
0 1 2 3
bar 10 0.026192 -1.367292 -1.732297 -0.174405
2 -0.351960 0.563901 0.634585 -0.540770
3 0.489480 0.265043 0.989557 0.783377
qux 10 0.544202 -0.061462 1.020261 -2.170451
2 -0.506330 0.335722 -0.303334 -0.916619
3 0.877082 0.235224 0.868546 2.197707
然后我们可以应用groupby来查找每个第一级索引的项目数。然后我们将它与您期望的项目数进行比较。最后,我们使用创建的布尔掩码来过滤我们的数据帧(有关here的更多详细信息)。
npm link