Python 按行中的值从数据透视表中筛选

Python 按行中的值从数据透视表中筛选,python,pandas,dataframe,pivot-table,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 ...

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

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
对应的索引?

您可以链接两个
loc
选择,第一个选择基于标签的行,第二个将使用函数根据您的条件对列进行子集设置。或者可以使用单个嵌套的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[df.loc[1]>=4.0]
来屏蔽原始df。您想为该特定行创建一个系列,该行的列只有
=4
?谢谢@G.Anderson,但是,此解决方案不起作用:
索引错误:作为索引器提供的不可对齐的布尔序列(布尔序列的索引和索引对象的索引不匹配)。
谢谢@ALollz,是的,我希望该行的列
>=4
谢谢!然而,我想我刚刚找到了另一个更适合我需要的解决方案
s=df.loc[1]>=4.0
,因此
s[s].index.values
,这实际上是第二个answer@Oscar您可以将
.index
添加到任何索引的末尾,以获取索引值。您的方法也非常有效。
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