python - 比较 Pandas 列中的上一个和下一个不同值

标签 python pandas

我有一个包含一列 float 的数据框,如下所示(为简单起见,示例使用整数):

  col1                    
0 10    
1 10  
2 5
3 5
4 5
5 10
6 4
7 4
8 4
9 4
10 4
11 5
12 5

我正在尝试创建一个新列,为每一行比较前一个和下一个与该行中的值不同的值,并根据它们是否相等分配一个 bool 值。例如,在 row[2] 中,值为 5,在 row[1] 中,前一个不同值(不是 5)是 10,下一个不同值是 10在行[5]中。在这种情况下,新列中的值将为 True

然后,对于示例 df,我试图获得的输出是

  col1  col2                
0 10    NaN
1 10    False
2 5     True
3 5     True
4 5     True
5 10    False
6 4     False
7 4     False
8 4     False
9 4     False
10 4    False
11 5    False
12 5    NaN

我知道如何与特定数量的前一行和后一行进行比较,但我不知道是否可以通过搜索“第一个不同值”进行比较。

有什么办法可以做到这一点吗?

非常感谢!

最佳答案

您可以使用一行中的唯一值来完成此操作,然后重新索引,例如:

s = df['col1'] #to ease the code
#where the value is not the same as before
m = s.diff().ne(0) 
# unique value if following
su = s[m].reset_index(drop=True)
print (su)
# 0    10
# 1     5
# 2    10
# 3     4
# 4     5
# Name: col1, dtype: int64

#create columns in df to align previous and after not equal value
df['col1_after'] = su.reindex(m.cumsum().values).values
df['col1_before'] = su.reindex(m.cumsum().values-2).values
#create col2 where the two previous columns are equal
df['col2'] = df['col1_after'].eq(df['col1_before'])

你会得到

print (df)
    col1  col1_after  col1_before   col2
0     10         5.0          NaN  False
1     10         5.0          NaN  False
2      5        10.0         10.0   True
3      5        10.0         10.0   True
4      5        10.0         10.0   True
5     10         4.0          5.0  False
6      4         5.0         10.0  False
7      4         5.0         10.0  False
8      4         5.0         10.0  False
9      4         5.0         10.0  False
10     4         5.0         10.0  False
11     5         NaN          4.0  False
12     5         NaN          4.0  False

请注意,您可以执行 df.drop(['col1_after','col1_before'], axis=1) 删除不需要的列,我将它们留在这里以显示发生的情况

关于python - 比较 Pandas 列中的上一个和下一个不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62179299/

相关文章:

python - 按总和分组作为新列名

python - 创建一个空的 Pandas DataFrame,然后填充它

python - reshape pd.DataFrame.aggregate 的结果

python - 如何根据 Python 中的条件停止播放音频?

Python:无法在AWS上使用socket.getaddrinfo()检索ipv6

python - 每个 Flask session 存储大数据或服务连接

python - Pandas Dataframe 排序和列值排序

python - 如何根据单列上的多个 StringMethods 高效且惯用地过滤 PandasDF 的行?

python - Keras plot_model 没有正确显示输入层

javascript - 使用 Python 抓取 javascript 生成的数据