在Python中将.sample()与.where()一起使用时出现不希望出现的结果

在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',

我试图从满足条件的数据帧中选择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','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)