Python 是否可以在不折叠数据帧的情况下获取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列的数据帧,计数是我想要的。但是,我还需要原始数据帧中的值,因此我一

我有一个包含9列的数据框,我正在尝试根据前3列添加一列具有唯一值的计数(例如Cols a、B和C,必须匹配才能作为唯一值计数,但其余列可能会有所不同。我尝试使用groupby这样做:

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