在Python中将.sample()与.where()一起使用时出现不希望出现的结果
我试图从满足条件的数据帧中选择2个随机值。 请参见以下示例:在Python中将.sample()与.where()一起使用时出现不希望出现的结果,python,pandas,numpy,jupyter-notebook,jupyter,Python,Pandas,Numpy,Jupyter Notebook,Jupyter,我试图从满足条件的数据帧中选择2个随机值。 请参见以下示例: data = {'col1': ['abc', 'def','ghi','jkl','mno','pqr','stu','vwx','yz'], 'col2': ['4', '1','4','4','0','1','4','2','4'], 'col3': ['Sweden', 'Malaysia','Sweden','Venezuela','France','Sweden','Australia',
data = {'col1': ['abc', 'def','ghi','jkl','mno','pqr','stu','vwx','yz'],
'col2': ['4', '1','4','4','0','1','4','2','4'],
'col3': ['Sweden', 'Malaysia','Sweden','Venezuela','France','Sweden','Australia','Belgium','Sweden']
}
df = pd.DataFrame (data, columns = ['col1','col2','col3'])
我想从'col1'中选择2个随机值,其中'col2'等于4。然后我使用的代码是:
print(df['col1'].sample(n=2).where(df['col2']==4))
所需输出为:
0 abc
6 stu
……或
8 yz
2 ghi
然而,该代码目前给出了如下输出:
7 NaN
3 NaN
这是不可取的,因为a)我希望看到字符串值为文本,b)与第3行相对应的值符合标准,而与第7行相对应的值不符合标准,因此并非所有情况下都符合标准
问题:
。其中(df['col2']==4)和(df['col3']==瑞典)
感谢您的指导。也许先过滤您的数据会更容易。我不确定您是否特别想使用
.where()
,但如果不想,这也将有助于您下一步添加更多标准
另外,我认为部分问题在于,在df中,col2值是字符串,因此需要让公式找到“4”,而不是数字4
df.loc[df['col2'] == '4','col1'].sample(n=2)
非常感谢。这起作用,有助于提高我对这个问题的理解。对于附加条件,我将使用以下代码:
df.loc[(df['col2']='4')&(df['col3']='Sweden'),'col1'].sample(n=2)