为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守候你守候我 2022-12-20 14:41:06
我有一个带有一列浮点数的数据框,看起来像这样(为简单起见,示例使用整数):  col1                    0 10    1 10  2 53 54 55 106 47 48 49 410 411 512 5我正在尝试创建一个新列,为每一行比较该行中的前一个和下一个不同值,并根据它们是否相等分配一个布尔值。例如,在 row[2] 中,值为 5,在 row[1] 中,前一个不同值(不是 5)是 10,在 row[5] 中,下一个不同值是 10。在这种情况下,新列中的值为True。然后,例如 df 我试图获得的输出是  col1  col2                0 10    NaN1 10    False2 5     True3 5     True4 5     True5 10    False6 4     False7 4     False8 4     False9 4     False10 4    False11 5    False12 5    NaN我知道如何与特定数量的前后行进行比较,但我不知道是否可以通过搜索“第一个不同的值”进行比较。有什么办法吗?非常感谢!
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

您可以连续使用唯一值来完成它,然后reindex喜欢:


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)删除不需要的列,我将它们留在这里以显示正在发生的事情


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号