这是我的名为bp的数据:
a b c d e ....
1 2 5 3 999 ....
2 4 2 4 2 ....
999 2 8 7 999 ....
在这个数据中,我想检测包含'999'的列。有一次,我们发现它有'999',那么我们需要创建一个名为'变量名'+'_check'的新变量,例如,'a'列包含'999',那么我们需要创建一个新列名为'a_check'。然后,在'a_check'中,如果原始变量是极端的,我希望值为1。所以我希望有这个:
a b c d e a_check e_check
1 2 5 3 999 0 1
2 4 2 4 2 0 0
999 2 8 7 999 1 1
我有很多这样的变量,所以我在考虑如何在python中自动化这个过程。
到目前为止,这是我的工作:
for columns in bp:
if any(bp.columns == -999.000):
bp['columns' + '_check'] = int((bp.columns == -999.000))
我的代码不会出错,但不起作用。
答案 0 :(得分:1)
pd.concat([df,(df==999).loc[:,(df==999).any()].astype(int).add_suffix('_check')],axis=1)
Out[624]:
a b c d e a_check e_check
0 1 2 5 3 999 0 1
1 2 4 2 4 2 0 0
2 999 2 8 7 999 1 1
答案 1 :(得分:1)
首先创建一个条件为真的检查列,
df['check'] = df[df == 999].idxmax(1)
你得到了
a b c d e check
0 1 2 5 3 999 e
1 2 4 2 4 2 NaN
2 999 2 8 7 999 a
现在在check
中创建与非空值对应的列for col in df.check[df.check.notnull()].values.tolist():
df[col+'_check'] = (df[col] == 999).astype(int)
你得到了
a b c d e check e_check a_check
0 1 2 5 3 999 e 1 0
1 2 4 2 4 2 NaN 0 0
2 999 2 8 7 999 a 1 1
答案 2 :(得分:-1)
在python3中试试这个:
for columns in bp:
if 999 in bp[columns].values:
bp[columns + '_check'] = list(map(lambda x: int(x == 999), bp[columns]))