[英]compare non-numeric values in two rows in a column pandas
我问了这个问题,提供的答案对我非常有用。
但是,现在我有一项类似的任务,即比较同一列的两行的值,但这次,列是非数字的。 所以简而言之,我的 df 是这样的
color char days text
1 red light 7 good
2 red light 30 good
3 red medium 60 bad
4 blue dark 7 bad
5 blue light 30 good
6 blue light 60 bad
7 yellow light 7 good
8 yellow medium 30 bad
9 yellow dark 60 bad
所以基本上,对于每种颜色,我都有 7 天、30 天和 60 天的 char 值。 请注意,正如我在上面的示例中给出的那样,这些顺序并不总是正确的。 我现在的任务是比较连续天值之间每种颜色的 char 值,如果该值与以前不同,则在“文本”列中写入“NA”。 第 7 天类别中的文本是默认的,不能被覆盖。
期望的结果:
color char days text
1 red light 7 good
2 red light 30 good
3 red medium 60 NA
4 blue dark 7 bad
5 blue light 30 NA
6 blue light 60 bad
7 yellow light 7 good
8 yellow medium 30 NA
9 yellow dark 60 NA
我尝试了另一个问题的解决方案,有几个变体,但它对我不起作用。 有人可以帮我吗? 我不一定只需要给定解决方案的变体,但任何有效的方法都值得赞赏。
您可以尝试 groupby color
然后屏蔽每个组中的text
列
df['text'] = (df.sort_values(['color', 'days'])
.groupby('color', as_index=False, group_keys=False)
.apply(lambda g: g['text'].mask(g['char'].ne(g['char'].shift().bfill()), np.nan)))
print(df)
color char days text
1 red light 7 good
2 red light 30 good
3 red medium 60 NaN
4 blue dark 7 bad
5 blue light 30 NaN
6 blue light 60 bad
7 yellow light 7 good
8 yellow medium 30 NaN
9 yellow dark 60 NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.