按两列分组,求和、计数并在单独的列中显示输出值(熊猫)

Lyn*_*ynn 5 python numpy pandas

我有一个数据集 df,我想在其中对两列进行分组,取另一列的总和和计数,并在单独的列中列出字符串

数据

id  date    pwr type
aa  q321    10  hey
aa  q321    1   hello
aa  q425    20  hi
aa  q425    20  no
bb  q122    2   ok
bb  q122    1   cool
bb  q422    5   sure
bb  q422    5   sure
bb  q422    5   ok
Run Code Online (Sandbox Code Playgroud)

想要的

id  date    pwr count   type
aa  q321    11  2       hey
                        hello
aa  q425    40  2       hi
                        no
bb  q122    3   2       ok
                        cool
bb  q422    15  3       sure
                        sure
                        ok
Run Code Online (Sandbox Code Playgroud)

正在做

g = df.groupby(['id', 'date'])['pwr'].sum().reset_index()
g['count'] = g['id'].map(df['id'].value_counts())
Run Code Online (Sandbox Code Playgroud)

这工作正常,除了,我不知道如何显示列“类型”的字符串输出任何建议表示赞赏。

Sea*_*ean 3

您可以使用设置列和.GroupBy.transform()的值。然后在 4 列上,除了获得与所需输出类似的布局:pwrcount.set_index()type

df['pwr'] = df.groupby(['id', 'date'])['pwr'].transform('sum')
df['count'] = df.groupby(['id', 'date'])['pwr'].transform('count')

df.set_index(['id', 'date', 'pwr', 'count'])
Run Code Online (Sandbox Code Playgroud)

输出:

                    type
id date pwr count       
aa q321 11  2        hey
            2      hello
   q425 40  2         hi
            2         no
bb q122 3   2         ok
            2       cool
   q422 15  3       sure
            3       sure
            3         ok
Run Code Online (Sandbox Code Playgroud)