Я хотел сопоставить конкретный блок if в java
...
...
if(isTrue){
doAction();
}
...
...
}
. Если я использую regExp
if \(isTrue(.|\n)*}
, он включал замыкающую скобку для блока метода, поэтому я использовал
if \(!isTrue([^}.]|\n)*}
, чтобы исключить заключительную скобку из соответствия шаблону.
Не уверен, почему имена столбцов отличаются от документации Microsoft, которую вы цитировали. Но предполагая, что у вас все в порядке с переименованием столбца в соответствии с этими документами, вы можете использовать numpy bitwise_and
df = pd.read_csv('data2.csv')
flags = {
'SCRIPT' : 0x0001,
'ACCOUNTDISABLE' : 0x0002,
'HOMEDIR_REQUIRED' : 0x0008,
'LOCKOUT' : 0x0010,
'PASSWD_NOTREQD' : 0x0020,
#.... (add more flags here as required, I just copy-pasted from the docs)
}
for (f, mask) in flags.items():
df[f] = np.bitwise_and(df['column3'], mask) / mask
print(df)
. Это приводит к: которые были соединены вместе как шестнадцатеричное число с использованием битовой маски - довольно распространенный шаблон.
Вы не можете использовать созданную вами функцию, чтобы делать то, что вы хотите. Например, каждый раз, когда вы делаете df['SPECIALUSER']=1
, он присваивает 1 целому столбцу, а не только строке, которую вы считаете целью. Чтобы назначить каждое значение правильной строке, вы должны назначать значения для каждого столбца отдельно:
df['SPECIALUSER'] = np.where(df['column3'] >= 1000, 1, 0)
df['NORMALUSER'] = np.where((df['column3'] - 1000) >= 512, 1, 0)
...
Я не совсем понял логику, которую вы используете для назначения 1 и 0, но если вы исправите это и повторите из того, что я написал выше для всех нужных вам столбцов, вы сможете получить желаемый результат.