gpt4 book ai didi

python - 将行的最后一个元素与 pandas 中的行的其余部分进行比较

转载 作者:行者123 更新时间:2023-12-02 03:05:25 24 4
gpt4 key购买 nike

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

例如:

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

我想要做的是将第三列中的元素与各自行中的其他元素进行比较,第 n 行中的每个元素 < 第 n 行的最后一个元素返回 true/false 或 1/0。

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com