Новая переменная Pandas, основанная на нескольких условиях - PullRequest
0 голосов
/ 02 ноября 2018

Я потратил два дня на поиски, любая помощь будет признательна.

Попытка создать c_flg на основе значений в других столбцах.

a_flg    b_flg    Count    c_flg (Expected Output)
False    True       3      False
True     False      2      False
False    False      4      True

a_flg & b_flg - это strs, Count - это int

Подход с двух сторон, ни один не удачный.

Метод 1:

df['c_flg'] = np.where((df[(df['a_flg'] == 'False') & 
(df['b_flg'] == 'False') &
(df['Count'] <= 6 )]), 'True', 'False')

ValueError: длина значений не соответствует длине индекса

Метод 2:

def test_func(df):
    if (('a_flg' == 'False') & 
    ('b_flg' == 'False') &

    ('Count' <= 6 )):
        return True

    else:
       return False


df['c_flg']=df.apply(test_func, axis=1)


TypeError: ('unorderable types: str() <= int()', 'occurred at index 0')

Очень новый для языка Python, помощь будет принята.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Я полагаю, np.where не является необходимым, используйте ~ для инвертированной логической маски и цепочку & для побитового AND:

print (df.dtypes)
a_flg     bool
b_flg     bool
Count    int64
dtype: object

df['c_flg'] = ~df['a_flg'] & ~df['b_flg'] & (df['Count'] <= 6)
print (df)
   a_flg  b_flg  Count  c_flg
0  False   True      3  False
1   True  False      2  False
2  False  False      4   True
0 голосов
/ 02 ноября 2018

Если я правильно понимаю вашу проблему, тогда вам нужно это,

df['c_flg']=(df['a_flg']=='False')&(df['b_flg']=='False')&(df['Count']<=6)
df['c_flg']=(df['a_flg']==False)&(df['b_flg']==False)&(df['Count']<=6)#use this if 'x_flg' is boolean

Выход:

   a_flg  b_flg  Count  c_flg
0  False   True      3  False
1   True  False      2  False
2  False  False      4   True

Примечание: для этой проблемы вам действительно не нужно numpy, сама pandas может решить эту проблему без проблем.

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