连续按值从熊猫数据透视表过滤

时间:2020-04-29 16:03:25

标签: python pandas dataframe pivot-table

我通过数据透视表创建了一个(大)稀疏矩阵。

UserId                                                               ...   
1         5.0   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...   
2         NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...   
3         NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...   
4         NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...   
5         NaN   NaN   NaN   NaN   NaN   2.0   NaN   NaN   NaN   NaN  ...   
...       ...   ...   ...   ...   ...   ...   ...   ...   ...   ...  ...   
6036      NaN   NaN   NaN   2.0   NaN   3.0   NaN   NaN   NaN   NaN  ...   
6037      NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...   
6038      NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...   
6039      NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...   
6040      3.0   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...   

MovieId  3943  3944  3945  3946  3947  3948  3949  3950  3951  3952  
UserId                                                               
1         NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
2         NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
3         NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
4         NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
5         NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
...       ...   ...   ...   ...   ...   ...   ...   ...   ...   ...  
6036      NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
6037      NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
6038      NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
6039      NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  
6040      NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  

现在,我正在寻找一种方法,给定行索引(例如1),请选择所有值> 4.0的索引。有没有简单的方法可以这样做? 我尝试了以下

df.loc[1] >= 4.0

但是我得到的是

MovieId
1        True
2       False
3       False
4       False
5       False
        ...  
3948    False
3949    False
3950    False
3951    False
3952    False
Name: 1, Length: 3706, dtype: bool

表示我快到了,但还不完全。如何提取与True相对应的索引?

1 个答案:

答案 0 :(得分:2)

您可以链接两个loc选择,第一个根据标签选择行,第二个将使用函数根据您的条件对列进行子集化。或者,您可以使用单个嵌套位置,其中列掩码也称为.loc

import numpy as np
import pandas as pd

np.random.seed(42)
df = pd.DataFrame(np.random.choice([1, np.NaN, 5], p=[.2, .7, .1], size=(2, 40)))

df.loc[1].loc[lambda x: x >= 4]
#or 
df.loc[1, df.loc[1] >= 4]

#3     5.0
#10    5.0
#12    5.0
#15    5.0
#29    5.0
#Name: 1, dtype: float64