将数据框值与同一行中的特定列进行比较

时间:2018-03-25 18:27:12

标签: python performance pandas

我想将数据框的所有行中的与同一行中的特定列进行比较。我设法通过遍历所有行来完成它,它适用于较小的数据集,但随着行数和列数的增加而开始引起问题。

我很想知道,有没有更有效的方法来实现熊猫?

我目前的解决方案示例:

data = np.array([['Identifier','N1','N2','N3','N4','mean'],
                ['Row1',1,2,3,4,2.5],
                ['Row2',5,4,3,2,3.5],
                ['Row3',1,5,1,5,3],
                ['Row4',1,2,3,10,4]               
                ])

df = pd.DataFrame(data=data[1:,1:],
                 index=data[1:,0],
                 columns=data[0,1:])
df.head()

结果:

        N1  N2  N3  N4  mean
Row1    1   2   3   4   2.5
Row2    5   4   3   2   3.5
Row3    1   5   1   5   3
Row4    1   2   3   10  4

要将其转换为布尔数据帧,请执行以下操作:

# new dataframe with same structure
df_bools = pd.DataFrame().reindex_like(df)
df_bools["mean"] = df["mean"]

# iterate over row values
for index,row in df.iterrows():
    colcnt = 0
    for i in row[0:-1]:
        df_bools.iloc[df.index.get_loc(index),colcnt] = (i>row["mean"])
        colcnt += 1

df_bools.head()

和期望的结果:

        N1      N2      N3      N4      mean
Row1    False   False   True    True    2.5
Row2    True    True    False   False   3.5
Row3    False   True    False   True    3
Row4    False   False   False   False   4

1 个答案:

答案 0 :(得分:1)

IIUC

df.iloc[:,:4]=df.iloc[:,:4].gt(df['mean'],0)
df
Out[1015]: 
         N1     N2     N3     N4 mean
Row1  False  False   True   True  2.5
Row2   True   True  False  False  3.5
Row3  False   True  False   True    3
Row4  False  False  False  False    4