Python 相当于 R 的 seq_len、slice,以及在哪里?

标签 python numpy

从 R 过渡到 Python,我很难复制以下代码:

df = df %>% group_by(ID) %>% slice(seq_len(min(which(F < 1 & d == 8), n()))

示例数据:

ID     Price        F         D
 1      10.1       1          NAN
 1      10.4       1          NAN 
 1      10.6      .8           8
 1      8.1       .8          NAN
 1      8.5       .8          NAN 
 2      22.4       2          NAN
 2      22.1       2          NAN
 2      21.1      .9           8
 2      20.1      .9          NAN
 2      20.1      .9           6

具有所需的输出:

ID     Price       F           D
 1      10.1       1          NAN
 1      10.4       1          NAN 
 2      22.4       2          NAN
 2      22.1       2          NAN

我相信 python 中的代码将包括某种: np.where、cumcount() 和切片。

但是,我不知道该怎么做。 任何帮助将不胜感激,谢谢。

编辑:对于将来提出我的问题并希望找到解决方案的任何人 - yatu 的解决方案工作得很好 - 但我已经找到了另一个解决方案,我发现它更容易阅读:

df['temp'] = np.where((df['F'] < 1) & (df['D'] == 8), 1, 0)
mask = df.groupby(ID)['temp'].cumsum().eq(0)
df[mask]

我已经阅读了一些关于屏蔽的内容,它确实有助于大大简化 python 的复杂性!

最佳答案

您可以使用以下条件索引数据帧:

c1 = ~df.Distro.eq(8).groupby(df.ID).cumsum()
c2 = df.Factor.lt(1).groupby(df.ID).cumsum().eq(0)
df[c1 & c2]

   ID  Price  Factor  Distro
0   1   10.1     1.0    NAN
1   1   10.4     1.0    NAN
5   2   22.4     2.0    NAN
6   2   22.1     2.0    NAN

请注意,通过获取 bool 系列的 .cumsum,您实际上是在传播 True 值,因此一旦 True 出现其余值将为True。一旦出现值,该结果已被否定,可用于从数据框中删除行。

<小时/>

详细信息

以下数据帧显示了原始数据帧以及用于索引它的条件。在这种情况下,鉴于指定的条件发生在同一行中,两个条件显示相同的行为:

df.assign(c1=c1, c2=c2)

   ID  Price  Factor Distro     c1     c2
0   1   10.1     1.0    NAN   True   True
1   1   10.4     1.0    NAN   True   True
2   1   10.6     0.8      8  False  False
3   1    8.1     0.8    NAN  False  False
4   1    8.5     0.8    NAN  False  False
5   2   22.4     2.0    NAN   True   True
6   2   22.1     2.0    NAN   True   True
7   2   21.1     0.9      8  False  False
8   2   20.1     0.9    NAN  False  False
9   2   20.1     0.9      6  False  False

关于Python 相当于 R 的 seq_len、slice,以及在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633641/

相关文章:

python - basemap 导致python中止

python - Python中nan和 'nan'的区别

javascript - Django - simplejson 响应

python - 如何使用 openCV 和 python 从流中逐帧获取视频

python - Django mysql 查询仅返回第一列

python - 为什么 numpy.random.binomial(1, nan) = -9223372036854775807?

python - 关于OpenCV中reshape函数的困惑

python - pcolormesh 上的标签

python genfromtxt问题

python numpy 成对编辑距离