Python 计数列B值\u计数列A中相同的值
对于下面的输入数据框,我们要创建两列,A_count和B_count 有一个名为around_row_num的输入变量。即,对于around_row_num=2,我们希望查看当前行之前的两行和之后的两行,并计算与当前行具有相同“ID”的列“Label”中出现“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']})
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。