我有以下示例数据框:
column1,column2,column3
tom,0100,544
tim,0101,514
ben,0899,1512
第三列包含useraccountcontrolflag,每行表示一个用户条目。标志是累积的。 这意味着-disabled用户帐户,UserAccountControl设置为514(2+512)。在我的例子中,tim被禁用了。你知道吗
我想为每个标志创建一个新列,如果标志被设置,它将在其中赋值1,否则赋值0。你知道吗
对于上面的示例,输出如下所示:
column1 column2 column3 DISABELDACCOUNT NORMALUSER PASSWORDNOTREQ TEMP_DUPLICATE_ACCOUNT SPECIALUSER
tom 100 544 0 1 1 0 0
tim 100 512 0 1 0 0 0
ben 899 1512 0 1 0 0 1
这是我的python代码-但它不适用于我的数据帧。它只适用于一行。。。你知道吗
#!/bin/python
import pandas as pd
from pandas import DataFrame
import numpy as np
def get_flags(number):
df['DISABELDACCOUNT']=0
df['NORMALUSER']=0
df['PASSWORDNOTREQ']=0
df['TEMP_DUPLICATE_ACCOUNT']=0
df['SPECIALUSER']=0
while number > 0:
if number >= 1000:
df['SPECIALUSER']=1
number = number - 1000
continue
elif number >= 512:
df['NORMALUSER']=1
number = number - 512
continue
elif number >= 256:
df['TEMP_DUPLICATE_ACCOUNT']=1
number = number - 256
continue
elif number >=32:
df['PASSWORDNOTREQ']=1
number = number - 32
continue
elif number >=2:
df['TEMP_DUPLICATE_ACCOUNT']=1
number = number - 2
continue
df = pd.read_csv('data2.csv')
df['column3'].apply(get_flags)
提前多谢了!你知道吗
不知道为什么列名与您引用的Microsoft文档不同。但是假设您可以根据文档重命名列,那么可以使用numpy
bitwise_and
这将输出:
顺便说一下,使用位掩码检查作为十六进制数串在一起的标志是一种非常常见的模式。你知道吗
你不能用你创建的函数来做你想做的事。例如,每次执行
df['SPECIALUSER']=1
操作时,它都会将1赋给整列,而不仅仅赋给您认为目标行。 要将每个值赋给正确的行,必须将值分别赋给每个列:我不完全理解你用来分配1和0的逻辑,但是如果你纠正了这个错误,并且对所有你需要的列重复我上面写的内容,你应该能够得到你想要的结果。你知道吗
相关问题 更多 >
编程相关推荐