我尝试在需要来自不同行的两个参数的pandas数据帧上运行循环。我尝试使用.iloc和shift函数,但未获得所需的结果。 这是一个简单的示例,可以更好地解释我想做什么:
dataframe1:
error.log
对于上述df,我想创建一个新列('d'),仅当'b'列中的值之间的差异等于1时才获取该列中的差异。值应为null。类似于以下dataframe2:
sub.py
有没有设计好的函数可以处理这种计算?
答案 0 :(得分:3)
使用loc
和diff()
尝试这样:
df.loc[df.b.diff() == 1, 'd'] = df.a.diff()
>>> df
a b c d
0 101 1 aaa NaN
1 211 2 dcd 110.0
2 351 3 yyy 140.0
3 401 5 lol NaN
4 631 6 zzz 230.0
答案 1 :(得分:2)
您可以创建一个组密钥
df1.groupby(df1.b.diff().ne(1).cumsum()).a.diff()
Out[361]:
0 NaN
1 110.0
2 140.0
3 NaN
4 230.0
Name: a, dtype: float64