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