我正在使用保存数字数据的pandas中的数据框。

例如:

d = {'col1': [1, 2,3,2], 'col2': [3, 4,1,2],'col3':[1,3,4,1}
df = pd.DataFrame(data=d)


我想做的是根据第n行中的每个元素
#Desired Output:
resDf = {'col1':[False,True,True,False],'col2':[False,False,True,False]}


到目前为止,我所做的是像这样使用apply

resultBoolDf = df.iloc[:,:-1].apply(lambda x: np.where(x < df.col3,1,0),axis = 0)


因此,这似乎不起作用,因为我认为比较未正确进行迭代。
有人可以给我提示如何解决这个问题吗?
谢谢!

最佳答案

使用DataFrame.lt与通过位置选择的最后一列进行比较:

df1 = df.iloc[:,:-1].lt(df.iloc[:, -1], axis=0)
#if want specify last column by label
#df1 = df.iloc[:,:-1].lt(df.col3, axis=0)
print (df1)
    col1   col2
0  False  False
1   True  False
2   True   True
3  False  False


如果需要,请最后使用0,1DataFrame.astype转换为整数:

df1 = df.iloc[:,:-1].lt(df.iloc[:, -1], axis=0).astype(int)
#if want specify last column by label
#df1 = df.iloc[:,:-1].lt(df.col3, axis=0).astype(int)
print (df1)
   col1  col2
0     0     0
1     1     0
2     1     1
3     0     0


您的numpy.where解决方案可以与DataFrame构造函数一起使用:

arr = np.where(df.iloc[:,:-1].lt(df.col3, axis=0),1,0)
df1 = pd.DataFrame(arr, index=df.index, columns = df.columns[:-1])
print (df1)
   col1  col2
0     0     0
1     1     0
2     1     1
3     0     0

关于python - 将一行的最后一个元素与 Pandas 中其余的行进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60950215/

10-14 00:57