根据多列分组聚合列的唯一值,并计数唯一 - 熊猫

  • 本文关键字:唯一 熊猫 python pandas pandas-groupby
  • 更新时间 :
  • 英文 :

ID col1 col2    col3
I1 1    0       1 
I2 1    0       1 
I3 0    1       0 
I4 0    1       0 
I5 0    0       1 

这是我的数据帧。我期待根据 col1,col2,col3 的分组来聚合 ID 值,并且还希望沿着 i 进行计数列。

预期输出 :

ID_List      Count 
[I1,I2]       2
[I3,I4]       2
[I5]          1

我的代码

cols_to_group = ['col1','col2','col3']
data = pd.DataFrame(df.groupby(cols_to_group)['id'].nunique()).reset_index(drop=True)
data.head()
ID
0  2
1  2
2  1

你可以做一个groupby.agg()

df.groupby(['col1','col2','col3'], sort=False).ID.agg([list,'count'])

输出:

list  count
col1 col2 col3                 
1    0    1     [I1, I2]      2
0    1    0     [I3, I4]      2
0    1         [I5]      1

您需要通过总和、计数等聚合函数。在这种情况下,计数。请尝试以下代码。

df.groupby(['col1','col2','col3']).ID.agg([list,'count']).reset_index(drop=True)

输出:

list    count
0   [I1, I2]    2
1   [I3, I4]    2
2   [I5]    1

你来了:

grouped = df.groupby(['col1', 'col2', 'col3'], sort=False).ID
df = pd.DataFrame({
'ID_List': grouped.aggregate(list),
'Count': grouped.count()
}).reset_index(drop=True)
print(df)

输出:

ID_List  Count
0  [I1, I2]      2
1  [I3, I4]      2
2      [I5]      1

最新更新