我有以下数据框:
Hotel_id Month_Year Chef_Id Chef_is_masterchef Transition
2400188 February-2018 4597566 1 0
2400188 March-2018 4597566 1 0
2400188 April-2018 4597566 1 0
2400188 May-2018 4597566 1 0
2400188 June-2018 4597566 1 0
2400188 July-2018 4597566 1 0
2400188 August-2018 4597566 1 0
2400188 September-2018 4597566 0 1
2400188 October-2018 4597566 0 0
2400188 November-2018 4597566 0 0
2400188 December-2018 4597566 0 0
2400188 January-2019 4597566 0 0
2400188 February-2019 4597566 0 0
2400188 March-2019 4597566 0 0
2400188 April-2019 4597566 0 0
2400188 May-2019 4597566 0 0
2400614 May-2015 2297544 0 0
2400614 June-2015 2297544 0 0
2400614 July-2015 2297544 0 0
2400614 August-2015 2297544 0 0
2400614 September-2015 2297544 0 0
2400614 October-2015 2297544 0 0
2400614 November-2015 2297544 0 0
2400614 December-2015 2297544 0 0
2400614 January-2016 2297544 1 1
2400614 February-2016 2297544 1 0
2400614 March-2016 2297544 1 0
3400624 May-2016 2597531 0 0
3400624 June-2016 2597531 0 0
3400624 July-2016 2597531 0 0
3400624 August-2016 2597531 1 1
2400133 February-2016 4597531 0 0
2400133 March-2016 4597531 0 0
2400133 April-2016 4597531 0 0
2400133 May-2016 4597531 0 0
2400133 June-2016 4597531 0 0
2400133 July-2016 4597531 0 0
2400133 August-2016 4597531 1 1
2400133 September-2016 4597531 1 0
2400133 October-2016 4597531 1 0
2400133 November-2016 4597531 1 0
2400133 December-2016 4597531 1 0
2400133 January-2017 4597531 1 0
2400133 February-2017 4597531 1 0
2400133 March-2017 4597531 1 0
2400133 April-2017 4597531 1 0
2400133 May-2017 4597531 1 0
当在Chef_is_Masterchef列中从0转换为1或从1转换为0时,此转换在转换列中指示为1
实际上,我想创建另一个列(名为“Var”),其中的值将按照下面提到的原始数据帧填充
预期数据帧:
Hotel_id Month_Year Chef_Id Chef_is_masterchef Transition Var
2400188 February-2018 4597566 1 0 -7
2400188 March-2018 4597566 1 0 -6
2400188 April-2018 4597566 1 0 -5
2400188 May-2018 4597566 1 0 -4
2400188 June-2018 4597566 1 0 -3
2400188 July-2018 4597566 1 0 -2
2400188 August-2018 4597566 1 0 -1
2400188 September-2018 4597566 0 1 0
2400188 October-2018 4597566 0 0 1
2400188 November-2018 4597566 0 0 2
2400188 December-2018 4597566 0 0 3
2400188 January-2019 4597566 0 0 4
2400188 February-2019 4597566 0 0 5
2400188 March-2019 4597566 0 0 6
2400188 April-2019 4597566 0 0 7
2400188 May-2019 4597566 0 0 8
2400614 May-2015 2297544 0 0 -8
2400614 June-2015 2297544 0 0 -7
2400614 July-2015 2297544 0 0 -6
2400614 August-2015 2297544 0 0 -5
2400614 September-2015 2297544 0 0 -4
2400614 October-2015 2297544 0 0 -3
2400614 November-2015 2297544 0 0 -2
2400614 December-2015 2297544 0 0 -1
2400614 January-2016 2297544 1 1 0
2400614 February-2016 2297544 1 0 1
2400614 March-2016 2297544 1 0 2
3400624 May-2016 2597531 0 0 -3
3400624 June-2016 2597531 0 0 -2
3400624 July-2016 2597531 0 0 -1
3400624 August-2016 2597531 1 1 0
2400133 February-2016 4597531 0 0 -6
2400133 March-2016 4597531 0 0 -5
2400133 April-2016 4597531 0 0 -4
2400133 May-2016 4597531 0 0 -3
2400133 June-2016 4597531 0 0 -2
2400133 July-2016 4597531 0 0 -1
2400133 August-2016 4597531 1 1 0
2400133 September-2016 4597531 1 0 1
2400133 October-2016 4597531 1 0 2
2400133 November-2016 4597531 1 0 3
2400133 December-2016 4597531 1 0 4
2400133 January-2017 4597531 1 0 5
2400133 February-2017 4597531 1 0 6
2400133 March-2017 4597531 1 0 7
2400133 April-2017 4597531 1 0 8
2400133 May-2017 4597531 1 0 9
如果观察到,在Var列的转换点处,我给出的值为零,并且在我保持相应整数值之前和之后的行
但是在使用下面的代码之后,我在Var列中遇到了一个问题,
s = df['Chef_is_masterchef'].eq(0).groupby(df['Chef_Id']).transform('sum')
df['var'] = df.groupby('Chef_Id').cumcount().sub(s)
上述代码的输出:
Hotel_id Month_Year Chef_Id Chef_is_masterchef Transition Var
2400188 February-2018 4597566 1 0 -9
2400188 March-2018 4597566 1 0 -8
2400188 April-2018 4597566 1 0 -7
2400188 May-2018 4597566 1 0 -6
2400188 June-2018 4597566 1 0 -5
2400188 July-2018 4597566 1 0 -4
2400188 August-2018 4597566 1 0 -3
2400188 September-2018 4597566 0 1 -2
2400188 October-2018 4597566 0 0 -1
2400188 November-2018 4597566 0 0 0
2400188 December-2018 4597566 0 0 1
2400188 January-2019 4597566 0 0 2
2400188 February-2019 4597566 0 0 3
2400188 March-2019 4597566 0 0 4
2400188 April-2019 4597566 0 0 5
2400188 May-2019 4597566 0 0 6
2400614 May-2015 2297544 0 0 -8
2400614 June-2015 2297544 0 0 -7
2400614 July-2015 2297544 0 0 -6
2400614 August-2015 2297544 0 0 -5
2400614 September-2015 2297544 0 0 -4
2400614 October-2015 2297544 0 0 -3
2400614 November-2015 2297544 0 0 -2
2400614 December-2015 2297544 0 0 -1
2400614 January-2016 2297544 1 1 0
2400614 February-2016 2297544 1 0 1
2400614 March-2016 2297544 1 0 2
3400624 May-2016 2597531 0 0 -3
3400624 June-2016 2597531 0 0 -2
3400624 July-2016 2597531 0 0 -1
3400624 August-2016 2597531 1 1 0
2400133 February-2016 4597531 0 0 -6
2400133 March-2016 4597531 0 0 -5
2400133 April-2016 4597531 0 0 -4
2400133 May-2016 4597531 0 0 -3
2400133 June-2016 4597531 0 0 -2
2400133 July-2016 4597531 0 0 -1
2400133 August-2016 4597531 1 1 0
2400133 September-2016 4597531 1 0 1
2400133 October-2016 4597531 1 0 2
2400133 November-2016 4597531 1 0 3
2400133 December-2016 4597531 1 0 4
2400133 January-2017 4597531 1 0 5
2400133 February-2017 4597531 1 0 6
2400133 March-2017 4597531 1 0 7
2400133 April-2017 4597531 1 0 8
2400133 May-2017 4597531 1 0 9
如果观察到,对于Chef_Id=4597566,您可以看到在转换点,Var列中的值不同于零
这会产生一个问题,因为在转换点,我必须为每个id选择最多包含3个月前和2个月后的行。同样在转换点,我必须使用以下代码为每个id选择最多包含6个月前和5个月后的行:
df1 = df[df['var'].between(-3, 2)]
print (df1)
df2 = df[df['var'].between(-6, 5)]
print (df2)
所以请告诉我解决办法
提前谢谢
使用^{} 作为每组计数器,然后通过比较} 减去
0
和^{0
值的数量:由^{} 进行的最后筛选:
相关问题 更多 >
编程相关推荐