我想将数据框的所有行中的值与同一行中的特定列进行比较。我设法通过遍历所有行来完成它,它适用于较小的数据集,但随着行数和列数的增加而开始引起问题。
我很想知道,有没有更有效的方法来实现熊猫?
我目前的解决方案示例:
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
答案 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