Python 计数列B值\u计数列A中相同的值

Python 计数列B值\u计数列A中相同的值,python,numpy,dataframe,functional-programming,data-science,Python,Numpy,Dataframe,Functional Programming,Data Science,对于下面的输入数据框,我们要创建两列,A_count和B_count 有一个名为around_row_num的输入变量。即,对于around_row_num=2,我们希望查看当前行之前的两行和之后的两行,并计算与当前行具有相同“ID”的列“Label”中出现“A”的次数 输入: import pandas as pd df = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2],'Label': ['A', 'A', 'B', 'B', 'A', 'B']})

对于下面的输入数据框,我们要创建两列,A_count和B_count

有一个名为around_row_num的输入变量。即,对于around_row_num=2,我们希望查看当前行之前的两行和之后的两行,并计算与当前行具有相同“ID”的列“Label”中出现“A”的次数

输入:

import pandas as pd

df = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2],'Label': ['A', 'A', 'B', 'B', 'A', 'B']})
    
   ID Label
0   1     A
1   1     A
2   1     B
3   1     B
4   2     A
5   2     B
周围_行_num=2的输出:

        ID  Label A_count B_count 
        1   A     2        1
        1   A     2        1
        1   B     1        2
        1   B     0        2        
        2   A     1        1
        2   B     1        1       


谢谢

从ID组更新到帐户:

df.set_index([df['ID'], 'Label'], append=True)['ID'].unstack()\
  .groupby('ID', as_index=False, group_keys=False)\
  .rolling(3, center=True).count()
输出:

Label    A    B
  ID           
0 1    2.0  0.0
1 1    2.0  1.0
2 1    1.0  2.0
3 1    0.0  2.0
4 2    1.0  1.0
5 2    1.0  1.0
Label    A    B
0      2.0  0.0
1      2.0  1.0
2      1.0  2.0
3      1.0  2.0
4      1.0  2.0
5      1.0  1.0
试试这个:

df.set_index('Label', append=True)['ID'].unstack().rolling(3, center=True).count()
输出:

Label    A    B
  ID           
0 1    2.0  0.0
1 1    2.0  1.0
2 1    1.0  2.0
3 1    0.0  2.0
4 2    1.0  1.0
5 2    1.0  1.0
Label    A    B
0      2.0  0.0
1      2.0  1.0
2      1.0  2.0
3      1.0  2.0
4      1.0  2.0
5      1.0  1.0

ID=1和Label='B'的输出不正确,对于第一个B,在2个空格内有两个A,对于第二个B,有1个空格。你太棒了!谢谢你的帮助。实际上,这个解决方案很棒,但是当ID改变值时,它不会分开。如果一行的ID=1,下一行的ID=2,它仍将查看下一行的滚动计数。你对此有什么建议吗?谢谢,你说得对。是的,我喜欢。给我几分钟,太好了,斯科特。非常感谢你!你怎么这么好?有没有像熊猫班之类的课程来提高熊猫的水平?再次感谢!是的。有。我推荐@TEDPROU。