如何在python中过滤两列的基础上返回重复数目的dataframe
您好,我是python新手,我正在尝试根据其他两列上的多个条件获取ID列的重复计数。所以我过滤掉红色和0,然后我想要重复多次的ID如何在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
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