Python 是否可以在不折叠数据帧的情况下获取groupby样式计数?
我有一个包含9列的数据框,我正在尝试根据前3列添加一列具有唯一值的计数(例如Cols a、B和C,必须匹配才能作为唯一值计数,但其余列可能会有所不同。我尝试使用groupby这样做:Python 是否可以在不折叠数据帧的情况下获取groupby样式计数?,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个包含9列的数据框,我正在尝试根据前3列添加一列具有唯一值的计数(例如Cols a、B和C,必须匹配才能作为唯一值计数,但其余列可能会有所不同。我尝试使用groupby这样做: df = pd.DataFrame(resultsFile500.groupby(['chr','start','end']).size().reset_index().rename(columns={0:'count'})) 这将返回一个包含5列的数据帧,计数是我想要的。但是,我还需要原始数据帧中的值,因此我一
df = pd.DataFrame(resultsFile500.groupby(['chr','start','end']).size().reset_index().rename(columns={0:'count'}))
这将返回一个包含5列的数据帧,计数是我想要的。但是,我还需要原始数据帧中的值,因此我一直试图以某种方式将这些计数值作为原始df中的一列。因此,这意味着如果列
chr
中的两行,start
和end
,已经如果值相同,counts
列在两行中都是2,但它们不会折叠到一行。这里有一个我缺少的简单解决方案,或者我需要组合一些东西吗?您可以使用.transform
获得非折叠行为:
>>> df
a b c d e
0 3 4 1 3 0
1 3 1 4 3 0
2 4 3 3 2 1
3 3 4 1 4 0
4 0 4 3 3 2
5 1 2 0 4 1
6 3 1 4 2 1
7 0 4 3 4 0
8 1 3 0 1 1
9 3 4 1 2 1
>>> df.groupby(['a','b','c']).transform('count')
d e
0 3 3
1 2 2
2 1 1
3 3 3
4 2 2
5 1 1
6 2 2
7 2 2
8 1 1
9 3 3
>>>
注意,我必须从.transform
结果中选择任意列,但只需执行以下操作:
>>> df['unique_count'] = df.groupby(['a','b','c']).transform('count')['d']
>>> df
a b c d e unique_count
0 3 4 1 3 0 3
1 3 1 4 3 0 2
2 4 3 3 2 1 1
3 3 4 1 4 0 3
4 0 4 3 3 2 2
5 1 2 0 4 1 1
6 3 1 4 2 1 2
7 0 4 3 4 0 2
8 1 3 0 1 1 1
9 3 4 1 2 1 3