Как исправить 'ValueError: Истинное значение DataFrame неоднозначно.Используйте a.empty, a.bool (), a.item (), a.any () или a.all (). 'когда & используется - PullRequest
0 голосов
/ 02 марта 2019

Я хочу переназначить значения на основе условий нескольких столбцов, но появляется ValueError.Я использовал & вместо and, что часто было ответом на решение такой ошибки.Моя цель и коды следующие:

ValueError: The truth value of a DataFrame is ambiguous. 
Use a.empty, a.bool(), a.item(), a.any() or a.all().

Я хочу перекодировать YearsInCanada == Age, если CountryBorn == Canada и YearsInCanada == None

df
Age    CountryBorn    YearsInCanada
87     NaN            77      
67     Canada         67
29     US             7
26     US             10
22     US             12
35     Canada         NaN
45     Canada         NaN

expected output
Age    CountryBorn    YearsInCanada
87     NaN            77      
67     Canada         67
29     US             7
26     US             10
22     US             12
35     Canada         35
45     Canada         45

Мои следующие коды показали ValueError

    if df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]:
        df['YearsInCanada'] == df['Age']

    else:
        df['YearsInCanada'] == df['YearsInCanada']

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Решение с использованием np.where():

df.YearsInCanada=np.where((df['YearsInCanada'].isna()) & (df['CountryBorn'] == 'Canada'),\
                      df.YearsInCanada.fillna(df.Age),df.YearsInCanada)
print(df)

   Age CountryBorn  YearsInCanada
0   87         NaN           77.0
1   67      Canada           67.0
2   29          US            7.0
3   26          US           10.0
4   22          US           12.0
5   35      Canada           35.0
6   45      Canada           45.0
0 голосов
/ 02 марта 2019
df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]

Возвращает (обработанный) фрейм данных.if требуется логическое выражение.

Если вы пытаетесь сделать векторизованное назначение, вы должны закодировать его как фильтр Pandas action +, а не как Python if.

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