gpt4 book ai didi

python - 仅选择序列组依据

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:57:45 24 4
gpt4 key购买 nike

我的数据集已根据下面的 pandas 数据框进行排序和过滤;

name id     id2 year    sales   seq
a 00632 00 2006 200.00 0
a 00632 00 2007 380.00 1
a 00632 00 2010 73.00 2
a 00632 00 2011 147.00 3
a 00632 00 2012 80.00 4

b 00003 00 2009 153.00 0
b 00003 00 2010 390.00 1
b 00003 00 2011 730.00 2
b 00003 00 2012 312.00 3
b 00003 00 2013 179.00 4

我在弄清楚如何分隔非连续年份时遇到了麻烦。我只有一个要返回的数据集;

a    00632  00  2010    73.00   2
a 00632 00 2011 147.00 3
a 00632 00 2012 80.00 4

b 00003 00 2009 153.00 0
b 00003 00 2010 390.00 1
b 00003 00 2011 730.00 2
b 00003 00 2012 312.00 3
b 00003 00 2013 179.00 4

逻辑基本上是按名称删除记录,其中年的顺序少于 3 年。

所以像下面这样的记录将被删除,因为它们只连续 2 年。

name id     id2 year    sales   seq
a 00632 00 2006 200.00 0
a 00632 00 2007 380.00 1

我希望它是有道理的,因为我在尝试找出这种逻辑的算法时遇到了麻烦。

最佳答案

分两步的方法。

我假设 df'id','year' 排序。

首先,为每个 'id' 找到第 + 2 行中出现 year + 2 的行:

In [15]: firstyears=(df.groupby('id')['year'].shift(-2)-df['year'])==2
# [ False False True False False | True True True False False ]

然后使用逻辑或 (|) 运算符选择好的行。 firstyears.shift(1) 将选择接下来的年份,firstyears.shift(2) next next

In [16]: df.loc[ firstyears | firstyears.shift(1) | firstyears.shift(2) ]
Out[16]:
name id id2 year sales seq
2 a 632 0 2010 73 2
3 a 632 0 2011 147 3
4 a 632 0 2012 80 4
5 b 3 0 2009 153 0
6 b 3 0 2010 390 1
7 b 3 0 2011 730 2
8 b 3 0 2012 312 3
9 b 3 0 2013 179 4

关于python - 仅选择序列组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com