【问题标题】:Find first row with condition after each row satisfying another condition在满足另一个条件的每一行之后查找具有条件的第一行
【发布时间】:2018-02-16 23:32:01
【问题描述】:

在熊猫中,我有以下数据框:

a b
0 0
1 1
2 1
0 0
1 0
2 1

现在我想做以下事情: 创建一个新列 c,并为 a = 0 的每一行用 1 填充 c。然后 c 应该用 1s 填充,直到每列完成后的第一行,其中 b = 1(这里我挂起),所以输出应该是这样的:

a b c
0 0 1
1 1 1
2 1 0
0 0 1
1 0 1
2 1 1

谢谢!

【问题讨论】:

  • a=0b=1 的行应该发生什么?如果您已经处于将 1 写入 c 的模式,并且遇到了该行,您是否继续将 1 写入 c?你停下来吗?如果您不是在将 1 写入 c 的模式中并且遇到该行,您是否开始向 c 写入 1?
  • 感谢伊利。我会先尝试 jezraels 解决方案或某事。使用apply,因为我的用例比这里的simplificatino复杂一点,我实际上对c不太确定。

标签: python pandas


【解决方案1】:

看来你需要:

df['c'] = df.groupby(df.a.eq(0).cumsum())['b'].cumsum().le(1).astype(int)
print (df)
   a  b  c
0  0  0  1
1  1  1  1
2  2  1  0
3  0  0  1
4  1  0  1
5  2  1  1

详情

print (df.a.eq(0).cumsum())
0    1
1    1
2    1
3    2
4    2
5    2
Name: a, dtype: int32

【讨论】:

  • 好的,谢谢。我会看看我是否可以将其应用于我的确切用例。
猜你喜欢
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多