为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据每个id的条件选择行

如何根据每个id的条件选择行

开心每一天1111 2023-07-27 10:25:54
我有以下数据框:Hotel_id    Month_Year      Chef_Id  Chef_is_masterchef  Transition2400188     February-2018   4597566     1                    02400188     March-2018      4597566     1                    02400188     April-2018      4597566     1                    02400188     May-2018        4597566     1                    02400188     June-2018       4597566     1                    02400188     July-2018       4597566     1                    02400188     August-2018     4597566     1                    02400188     September-2018  4597566     0                    12400188     October-2018    4597566     0                    02400188     November-2018   4597566     0                    02400188     December-2018   4597566     0                    02400188     January-2019    4597566     0                    02400188     February-2019   4597566     0                    02400188     March-2019      4597566     0                    02400188     April-2019      4597566     0                    02400188     May-2019        4597566     0                    02400614     May-2015        2297544     0                    02400614     June-2015       2297544     0                    02400614     July-2015       2297544     0                    02400614     August-2015     2297544     0                    02400614     September-2015  2297544     0                    02400614     October-2015    2297544     0                    02400614     November-2015   2297544     0                    02400614     December-2015   2297544     0                    02400614     January-2016    2297544     1                    12400614     February-2016   2297544     1                    02400614     March-2016      2297544     1                    0当Chef_is_Masterchef列中发生从0 到 1或1 到 0 的转换时,此转换在Transition列中指示为1。实际上,我想创建另一列(名为“ Var ”),其中的值将按照下面提到的原始数据框填充,
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

用于GroupBy.cumcount每组计数器,然后0通过比较0和来减去值的数量GroupBy.transform

s = df['Chef_is_masterchef'].eq(0).groupby(df['Chef_Id']).transform('sum')

df['var'] = df.groupby('Chef_Id').cumcount().sub(s)

print (df)

    Hotel_id      Month_Year  Chef_Id  Chef_is_masterchef  Transition  var

0    2400614        May-2015  2297544                   0           0   -8

1    2400614       June-2015  2297544                   0           0   -7

2    2400614       July-2015  2297544                   0           0   -6

3    2400614     August-2015  2297544                   0           0   -5

4    2400614  September-2015  2297544                   0           0   -4

5    2400614    October-2015  2297544                   0           0   -3

6    2400614   November-2015  2297544                   0           0   -2

7    2400614   December-2015  2297544                   0           0   -1

8    2400614    January-2016  2297544                   1           1    0

9    2400614   February-2016  2297544                   1           0    1

10   2400614      March-2016  2297544                   1           0    2

11   3400624        May-2016  2597531                   0           0   -3

12   3400624       June-2016  2597531                   0           0   -2

13   3400624       July-2016  2597531                   0           0   -1

14   3400624     August-2016  2597531                   1           1    0

15   2400133   February-2016  4597531                   0           0   -6

16   2400133      March-2016  4597531                   0           0   -5

17   2400133      April-2016  4597531                   0           0   -4

18   2400133        May-2016  4597531                   0           0   -3

19   2400133       June-2016  4597531                   0           0   -2

20   2400133       July-2016  4597531                   0           0   -1

21   2400133     August-2016  4597531                   1           1    0

22   2400133  September-2016  4597531                   1           0    1

23   2400133    October-2016  4597531                   1           0    2

24   2400133   November-2016  4597531                   1           0    3

25   2400133   December-2016  4597531                   1           0    4

26   2400133    January-2017  4597531                   1           0    5

27   2400133   February-2017  4597531                   1           0    6

28   2400133      March-2017  4597531                   1           0    7

29   2400133      April-2017  4597531                   1           0    8

30   2400133        May-2017  4597531                   1           0    9

最后过滤依据Series.between


df1 = df[df['var'].between(-3, 2)]

print (df1)


df2 = df[df['var'].between(-6, 5)]

print (df2)


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信