gpt4 book ai didi

python - 是否可以将 agg 和 value_counts 与 Pandas 组合在单行中

转载 作者:行者123 更新时间:2023-12-02 18:13:14 24 4
gpt4 key购买 nike

给定一个df

   a  b  ngroup
0 1 3 0
1 1 4 0
2 1 1 0
3 3 7 2
4 4 4 2
5 1 1 4
6 2 2 4
7 1 1 4
8 6 6 5

我想计算按 ngroup 列分组的多列(即 ab)的总和。

此外,我想计算每个组的元素数量。

基于这两个条件,预期输出如下

a   b   nrow_same_group ngroup
3 8 3 0
7 11 2 2
4 4 3 4
6 6 1 5

下面的代码应该可以完成工作

import pandas as pd

df=pd.DataFrame(list(zip([1,1,1,3,4,1,2,1,6,10],
[3,4,1,7,4,1,2,1,6,1],
[0,0,0,2,2,4,4,4,5])),columns=['a','b','ngroup'])


grouped_df = df.groupby(['ngroup'])
df1 = grouped_df[['a','b']].agg('sum').reset_index()


df2 = df['ngroup'].value_counts().reset_index()

df2.sort_values('index', axis=0, ascending=True, inplace=True, kind='quicksort', na_position='last')
df2.reset_index(drop=True, inplace=True)
df2.rename(columns={'index':'ngroup','ngroup':'nrow_same_group'},inplace=True)
df= pd.merge(df1, df2, on=['ngroup'])

但是,我想知道是否存在内置 pandas 可以在单行中实现类似的功能。

最佳答案

您可以仅使用 groupby + agg 来完成此操作.

import pandas as pd 

df=pd.DataFrame(list(zip([1,1,1,3,4,1,2,1,6,10],
[3,4,1,7,4,1,2,1,6,1],
[0,0,0,2,2,4,4,4,5])),columns=['a','b','ngroup'])

res = (
df.groupby('ngroup', as_index=False)
.agg(a=('a','sum'), b=('b', 'sum'),
nrow_same_group=('a', 'size'))
)

这里传递给 agg 的参数是元组,其第一个元素是要聚合的列,第二个元素是要应用于该列的聚合函数。参数名称是结果列的标签。

输出:

>>> res

ngroup a b nrow_same_group
0 0 3 8 3
1 2 7 11 2
2 4 4 4 3
3 5 6 6 1

关于python - 是否可以将 agg 和 value_counts 与 Pandas 组合在单行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71979792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com