pandas 每次满足条件时创建新列

wooyq4lh  于 2023-04-28  发布在  其他
关注(0)|答案(3)|浏览(167)

我的dataframe中有一列如下所示(总共265行):

FD
0.5
0.8
0.9
0.4

我想做的是每次FD大于0.7时创建一个新列。列需要有一个虚拟编码格式(例如,当FD大于时,将1放在剩下的行中,将0放在剩下的行中),并且每个列都被称为带有索引后缀的离群值。
基本上就是:

FD   outlier1 outlier2 outlier 3 ...
0.5    1         0        0
0.8    0         1        0
0.9    0         0        0
0.4    0         0        1

我已经创建了一个新列,每当FD大于0.7时,它就会标记:

outlier = []
for row in df['FD']:
    if row > 0.7: outlier.append('1')
    elseif row < 0.7@ outlier.append('0')

    else: outlier.append('0')

但是,它只创建一列:

FD   outlier
0.5    0 
0.8    1
0.9    1
0.4    0

由于我的问题的特殊性,以及对python的陌生,我发现很难找到解决方案。
先谢谢你了!

k4ymrczo

k4ymrczo1#

可能有一个更好的方法来使用Pandas,但这应该工作:

import pandas as pd

df = pd.DataFrame({'FD': [0.5, 0.8, 0.9, 0.4]})

col = 1
for i, row in enumerate(df['FD']):
    if row > 0.7:
        df[f'outlier{col}'] = 0
        df.at[i, f'outlier{col}'] = 1
        col += 1

print(df)

输出:

FD          outlier1  outlier2
0  0.5         0         0
1  0.8         1         0
2  0.9         0         1
3  0.4         0         0
zbsbpyhn

zbsbpyhn2#

你也可以尝试这样的东西:

import pandas as pd
import numpy as np

# Create a sample DataFrame
df = pd.DataFrame({'A': [0.5, 0.8, 0.9, 0.4]})
condition1 = df['A'] > 0.7
i = 0
for index, row in df.iterrows():
    if row['A'] > 0.7:
        df[f'outlier{i}'] = np.where(condition1, 1, 0)
    i += 1

print(df)

输出:

3mpgtkmj

3mpgtkmj3#

我想这可以解决你的问题:

import pandas as pd
import numpy as np
pd1=pd.DataFrame({"FD":[0.5,0.8,0.9,0.4]})
out=1;
for i in range(len(pd1.FD)):
  temp = np.zeros((len(pd1.FD),), dtype=int)
  if(pd1.FD[i]>0.7):
      temp[i] = 1
      pd1["outlier" + str(out)] = temp
      out+=1;
print(pd1)

输出:

FD  outlier1  outlier2
0  0.5         0         0
1  0.8         1         0
2  0.9         0         1
3  0.4         0         0

相关问题