python - 如何获取按多列分组的数据帧的第一行,并将聚合函数作为计数?

标签 python pandas dataframe aggregate pandas-groupby

我有一个数据框,其中我只想要每个组的第一行(使用多列分组),并将聚合函数作为计数。这是我试过的:

>>> df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['x/y/z','x/y','x/y/z/n','x/u','x','x/u/v','x/y/z','x','x/u/v/b','-','x/y','x/y/z','x','x/u/v/w'],['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
>>> df.columns = ['col1','col2','col3','col4','col5']
>>> df[['col1', 'col2', 'col4']].groupby(['col2', 'col4']).agg('count')
              col1
col2 col4
A    x           1
     x/y         1
     x/y/z       1
     x/y/z/n     1
B    x           1
     x/u         1
     x/u/v       1
     x/u/v/b     1
     x/y         1
     x/y/z       1
C    -           1
D    x           1
     x/u/v/w     1
     x/y/z       1

预期输出:

 col2 col4         col1
    A    x           1
    B    x           1
    C    -           1
    D    x           1

我怎样才能得到第一行?

最佳答案

使用GroupBy.head按一级索引:

df2 = df1.groupby(level='col2').head(1)
#used first level
#df2 = df1.groupby(level=0).head(1)
print (df2)
           col1
col2 col4      
A    x        1
B    x        1
C    -        1
D    x        1

或者使用boolean indexing通过使用 Index.duplicated 提取第一级值和反转掩码 ~:

df2 = df1[~df1.index.get_level_values('col2').duplicated()]

#used first level
#df2 = df1[~df1.index.get_level_values(0).duplicated()]
print (df2)
           col1
col2 col4      
A    x        1
B    x        1
C    -        1
D    x        1

关于python - 如何获取按多列分组的数据帧的第一行,并将聚合函数作为计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58573468/

相关文章:

python - 这是计算移动平均线的有效方法吗?

python - 在DataFrame中添加计算字段

python - Pandas 数据框到具有 bool 系列的结构化数组

python - Pandas :如何在数据框中存储列表?

python - N 维直方图,包含每个 bin 中权重的最大值

python - 使用 Python 在 Mac OS X 中查找当前事件窗口

python - 过滤器 2 列出了一遍(log(N) 复杂度)

python - 列出 pandas.read_sql 中的 sql 表

python - 如何从 pandas 多索引数据框中选择此类数据

python - 如何获得数据框中低于特定阈值的最小值?