首页 文章

pandas添加列,注意系列的真值是不明确的

提问于
浏览
0

我想为数据框a添加一列,

a = pd.DataFrame([[1,2],[3,4]],columns=['A','B'])
if a['B'] > a['A']:
    a['C']='是'
else:
    a['C']='否'

ValueError:系列的真值是不明确的 . 使用a.empty,a.bool(),a.item(),a.any()或a.all() .

2 回答

  • 2

    使用numpy.where

    #swapped 2,1
    a = pd.DataFrame([[2,1],[3,4]],columns=['A','B'])
    a['C'] = np.where(a['B']>a['A'], '是','否')
    print (a)
       A  B  C
    0  2  1  否
    1  3  4  是
    

    您的代码有问题,如果使用:

    print (a['B']>a['A'])
    0    False
    1     True
    dtype: bool
    

    它返回布尔掩码, if 无法决定做什么 .

    另请查看using if truth statements with pandas .

  • 1

    是的,在哪里或numpy.select

    a = pd.DataFrame([[2,1],[3,4]],columns=['A','B'])
    a['C'] = np.select([a['B']>a['A']], '是', default = '否')
    print(a)
    

    返回:

    A  B  C
    0  2  1  否
    1  3  4  是
    

    哪个容易扩展到更多条件:

    a = pd.DataFrame([[2,1],[3,4],[1,10]],columns=['A','B'])
    
    condlist = [
        a['B'] > 5*a['A'],
        a['B'] > a['A']
    ]
    valuelist = ['是', '否']
    
    a['C'] = np.select(condlist, valuelist, default=np.nan)
    print(a)
    

    返回:

    A   B    C
    0  2   1   nan
    1  3   4    否
    2  1  10    是
    

相关问题