我有一个如下所示的DataFrame:
0
[0, 0, 0, 0, 0] 0.0
[1, 0, 0, 0, 0] 1.0
...
[0, 1, 1, 1, 1] 0.0
[1, 1, 1, 1, 1] 1.0
我想将其子集化为包含给定数量1的索引。
条件可能类似于
lambda x: np.count_nonzero(x) == n
表示n个1。
我知道按条件进行子集可以用.loc以某种方式完成,并且有许多答案解释了如何在列上设置条件时这样做。如果条件在索引本身上,我没有找到解释如何做的任何事情。
我试过了:
rounded.loc[np.count_nonzero(rounded.index) == n]
但没有运气。我不确定是否有一些非常明显的东西逃脱了我。
我可以创建一个新的列,其中索引为值和子集基于此,但我想知道是否有更优雅的解决方案。
答案 0 :(得分:0)
在pandas中可以创建这个索引,但这并不容易。
让我将index
转换为list
然后转换为array
:
mask = np.count_nonzero(np.array(rounded.index.values.tolist()), axis=1) == n
样品:
df = pd.DataFrame({0:[0,1.0,0,1], 'a':[[0,0],[1,0],[1,1],[0,1]]})
rounded = df.set_index('a').rename_axis(None)
print (rounded)
0
[0, 0] 0.0
[1, 0] 1.0
[1, 1] 0.0
[0, 1] 1.0
n = 1
mask = np.count_nonzero(np.array(rounded.index.values.tolist()), axis=1) == n
print (mask)
[False True False True]
print (rounded[mask])
0
[1, 0] 1.0
[0, 1] 1.0