gpt4 book ai didi

python - 如何创建更高效​​的 bool 逻辑代码,将一列的多行与另一列进行比较?

转载 作者:行者123 更新时间:2023-11-28 22:11:41 24 4
gpt4 key购买 nike

我想要一种有效且通用的方法来根据一列的多行与其他列的多行的比较在数据框中创建新的 bool 列。多行是指一列的当前行和该列的一个或多个滞后(即 df['column'].shift(1)。现在我为数据框中的每一列创建一个逻辑比较。在下面的示例中,我只有 3 列。我希望有一种方法可以使用 any() 或 all() 为我可能有 50 列要检查的情况创建更有效的逻辑比较。

我已经通过为每一列编写详细条件并将条件放在 np.where() 语句中来成功创建该列。如果我必须检查 50 列,这种方法将不起作用。

此代码生成原始数据帧:

import numpy as np
import pandas as pd
df = pd.DataFrame({'C1':[3,2,8,6,6,7,8],'C2':[5,4,6,4,8,3,2],'C3': [5,4,6,7,8,6,4],
'Year':[2012,2013,2014,2015,2016,2017,2018]})
df.set_index('Year', inplace=True)
df1 =df[::-1]
df1

对于我给出的示例,我试图创建“成功”列,如果 cany 列为 8 且其下方的列(上一年)小于 8,则该列为 1。这是我到目前为止所做的:

Criteria_1 = ( (df1['C1']==8) & (df1['C1'] > df1['C1'].shift(-1) ) |
(df1['C2']==8) & (df1['C2'] > df1['C2'].shift(-1) )|
(df1['C3']==8) & (df1['C3'] > df1['C3'].shift(-1) )
)
df1['Sucess']=np.where(Criteria_1,1,0)

我希望看到与上面代码生成的输出相同,但使用 maybe any() 的代码更简洁,这样我就可以说如果任何列满足上述条件,成功应该等于 1。enter image description here

最佳答案

可能是这样的:

df1 =df[::-1].copy()
df1['Success']=(df1.eq(8)&df1.gt(df1.shift(-1))).any(axis=1).astype(int)
print(df1)

      C1  C2  C3  Success
Year
2018 8 2 4 1
2017 7 3 6 0
2016 6 8 8 1
2015 6 4 7 0
2014 8 6 6 1
2013 2 4 4 0
2012 3 5 5 0

关于python - 如何创建更高效​​的 bool 逻辑代码,将一列的多行与另一列进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55516955/

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