我正在使用保存数字数据的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,1
将DataFrame.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/