[英]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.