如何在python中过滤两列的基础上返回重复数目的dataframe

如何在python中过滤两列的基础上返回重复数目的dataframe,python,pandas,function,filter,duplicates,Python,Pandas,Function,Filter,Duplicates,您好,我是python新手,我正在尝试根据其他两列上的多个条件获取ID列的重复计数。所以我过滤掉红色和0,然后我想要重复多次的ID ID group categories 1 0 red 2 1 blue 3 1 green 4 1 green 1 0 blue 1 0 blue 2 1 red 3 0 r

您好,我是python新手,我正在尝试根据其他两列上的多个条件获取ID列的重复计数。所以我过滤掉红色和0,然后我想要重复多次的ID

ID group categories
1    0          red
2    1          blue
3    1          green
4    1          green
1    0          blue
1    0          blue
2    1          red
3    0          red
4    0          red
4    1          red
“类别”列中几乎有10个类别,因此我在想是否有任何方法可以编写函数或for循环,而不是重复相同的步骤。最终目标是查看给定类别的每个组中有多少重复ID为“红色”/“蓝色”/“绿色”。提前谢谢 注:组值不变,它是一个二项式变量

df1 = df[(df['categories']=='red')& (df['group'] == 0)]
df1['ID'].value_counts()[df1['ID'].value_counts()>1]

我认为您可以将
groupby
用于:

另一种解决方案是先使用过滤,然后计数,以获取重复项:

s = df.groupby(['ID','group'])['categories'].value_counts()
print (s)
ID  group  categories
1   0      blue          2
           red           1
2   1      blue          1
           red           1
3   0      red           1
    1      green         1
4   0      red           1
    1      green         1
           red           1
Name: categories, dtype: int64

out = s[s > 1].reset_index(name='count')
print (out)
   ID  group categories  count
0   1      0       blue      2
编辑:对于每个
ID
的计数类别(所有行),请使用:


我认为您可以将
groupby
用于:

另一种解决方案是先使用过滤,然后计数,以获取重复项:

s = df.groupby(['ID','group'])['categories'].value_counts()
print (s)
ID  group  categories
1   0      blue          2
           red           1
2   1      blue          1
           red           1
3   0      red           1
    1      green         1
4   0      red           1
    1      green         1
           red           1
Name: categories, dtype: int64

out = s[s > 1].reset_index(name='count')
print (out)
   ID  group categories  count
0   1      0       blue      2
编辑:对于每个
ID
的计数类别(所有行),请使用:


您能否(通过编辑您的问题)提供更多关于您正在尝试做什么以及“可重用的函数”的详细信息。您的代码不会输出重复的ID。最后应用
len
将返回找到的唯一重复ID的数量,以及您试图重新使用的确切内容?是的,很抱歉,我在发布时忘记删除它。。Thankso示例数据的预期输出是什么?这与我的答案不同?一个数据框/包含所有重复ID和它们的计数..谢谢你(通过编辑你的问题)提供了更多关于你正在尝试做什么以及你所说的“一个可以重用的函数”的详细信息。你的代码不会输出重复的ID。最后应用
len
将返回找到的唯一重复ID的数量,以及您试图重新使用的确切内容?是的,很抱歉,我在发布时忘记删除它。。Thankso示例数据的预期输出是什么?这与我的答案不同?一个数据框/包含所有重复的ID和它们的计数..谢谢
df = df[df.duplicated(['ID','group','categories'], keep=False)]
print (df)
   ID  group categories
4   1      0       blue
5   1      0       blue

df1 = df.groupby(['ID','group'])['categories'].value_counts().reset_index(name='count')
print (df1)
   ID  group categories  count
0   1      0       blue      2
df1 = df.groupby('ID').size().reset_index(name='count')
print (df1)
   ID  count
0   1      3
1   2      2
2   3      2
3   4      3