繁体   English   中英

Pandas dataframe 如果其他条件基于先前行不工作

[英]Pandas dataframe if else condition based on previous rows not working

有什么方法可以使下面的代码更高效。

for i in range(0, len(df)):
    current_row = df.iloc[i]    
    if i > 0:
        previous_row =df.iloc[i-1]
    else:
        previous_row = current_row 
    if (current_row['A'] != 1):
        if ((current_row['C'] < 55) and (current_row['D'] >= -1)):
            df.loc[i,'F'] = previous_row['F'] + 1
        else: 
            df.loc[i,'F'] = previous_row['F']

例如,如果 dataframe 如下所示:

df = pd.DataFrame({'A':[1,1,1, 0, 0, 0, 1, 0, 0], 'C':[1,1,1, 0, 0, 0, 1, 1, 1], 'D':[1,1,1, 0, 0, 0, 1, 1, 1],
'F':[1,1,1, 0, 0, 0, 1, 1, 1]})

我的 output 应该是这样的

>>> df
   A  C  D  F
0  1  1  1  1
1  1  1  1  1
2  1  1  1  1
3  0  0  0  2
4  0  0  0  3
5  0  0  0  4
6  1  1  1  1
7  0  1  1  2
8  0  1  1  3

所以基本上,如果满足条件,我希望'F'的值被修改为'F'+1的上一行。

我也尝试了下面的代码,但它起作用了。

df['prev'] = df.F.shift()
def shift(row):
    row['F'] = np.where((row['A'] != 1) & ((row['C']<55) & (row['D']>=-1)), row['prev'] + 1, row['prev'])
    return row['F']

df['F'] = df.apply(shift, axis=1)

使用df.F.shift(1)创建一个新列F_previous ,这样您将获得 1-shifted 值作为新列。 现在使用该列和其他列编写 function 以返回新的F值并使用apply方法获取F列的新值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM