Панды добавить столбцы, обратите внимание Истинное значение серии является неоднозначным - PullRequest
0 голосов
/ 10 октября 2018

Я хочу добавить столбец в фрейм данных a,

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

ValueError: Истинное значение Series является неоднозначным.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Да, где или 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    是
0 голосов
/ 10 октября 2018

Использование 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 не может решитьчто делать.

Проверьте также , используя ли утверждения истинности с пандами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...