【发布时间】:2022-01-23 19:50:23
【问题描述】:
我有一个数据框:
ColA ColB ColC
a 0 1
b 3 3
c 1 1
a 0 1
a 1 2
b 3 3
在根据列中的值进行过滤时,我需要识别具有不同值的每一行。示例:当我在 ColA 中过滤值为“a”的数据框时,第 5 行在 ColB 和 ColC 中具有不同的值。
我试过了
df['result']=df['ColA'].ne(df['ColA'].shift().bfill()).astype(int)
导致:
| ColA | ColB | ColC | result |
|---|---|---|---|
| a | 0 | 1 | 0 |
| b | 3 | 3 | 1 |
| c | 1 | 1 | 1 |
| a | 0 | 1 | 1 |
| a | 1 | 2 | 1 |
| b | 3 | 3 | 1 |
我需要的是(过滤值'a'应该识别其他列中具有不同值的行):
| ColA | ColB | ColC | result |
|---|---|---|---|
| a | 0 | 1 | 0 |
| b | 3 | 3 | 1 |
| c | 1 | 1 | 1 |
| a | 0 | 1 | 0 |
| a | 1 | 2 | 1 |
| b | 3 | 3 | 1 |
如果我使用 groupby 方法:
df.groupby(df.columns.tolist())['ColA'].nunique()
它仅适用于具有几种数据类型的小型数据帧。
【问题讨论】:
-
你为什么不能只做
df['result'] = df['ColB'] == df['ColC']?我不明白你在这里用 ColA 过滤是什么意思。 -
为什么 b、3、3 行的结果列是 1?据我了解,它应该是 0,因为它是 ColA 中带有 b 的第一行?
-
@MayurKr.Garg 在这里,单行中的值应该一起考虑。所以,应该比较行中发生的变化。示例:第 4 行具有与第 1 行相同的值。但是第 5 行有不同的值,因此结果列中的值为 1。
-
@Ben.T 你是对的。这是我的错误。
-
为什么第一行的结果是0,第三行的结果是1?
标签: python pandas dataframe rows