簡體   English   中英

pandas 添加列,注意 Series 的真值不明確

[英]pandas add columns ,note The truth value of a Series is ambiguous

我想在數據框 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()。

使用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不能決定做什么。

檢查還使用 if 與 pandas 的真值陳述

是的, where 或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    是

還有一個選項是

np.choose()

其中實施

np.choose('是','否')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM