python - 如何以聚合函数为计数获取由多列分组的第一行数据框?
问题描述
我有一个数据框,我只想要每个组的第一行(使用多列分组),聚合函数作为计数。这是我尝试过的:
>>> 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
推荐阅读
- amazon-web-services - 每个 POP 每个 CloudFront 分配的总缓存空间限制?
- python - 我无法在错误中说的 pycharm 上运行 locust
- wordpress - Wordpress 导出未导入所有数据
- python - python更改0值
- snowflake-cloud-data-platform - 创建空白 CSV 文件 Snowflake 暂存区
- java - Java 为什么 Calendar.get(Calendar.DST_OFFSET) 在夏令时给出 0?
- javascript - 如何检查字符串数组中是否存在字符?
- python - 如何在 Backtrade 中处理 GenericCSVData 中的日期格式
- javascript - JavaScript 在设置背景图像时将 ' 转换为 "
- java - 显示键盘时以编程方式滚动滚动视图