Groupby两列,求和、计数和在单独的列中显示输出值(Pandas)

2024-06-02 05:15:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集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

所需的

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

g = df.groupby(['id', 'date'])['pwr'].sum().reset_index()
g['count'] = g['id'].map(df['id'].value_counts())

这工作正常,只是我不确定如何显示列“type”的字符串输出 如有任何建议,我们将不胜感激


Tags: 数据字符串iddfdatetypeokaa
2条回答

您可以使用^{}设置列pwrcount的值。然后在除type之外的4列上.set_index()以获得与所需输出类似的布局

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'])

输出:

                    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

根据作者的假设,通过合并type列回答:

merged_data = []
for (id, date), dfg in df.groupby(['id', 'date']):
    merged_data.append({
        'id': id, 
        'date': date, 
        'pwr': dfg['pwr'].sum(),
        'count': dfg.shape[0],
        'types': ', '.join(dfg['type'].unique()),
    })

new_df = pandas.DataFrame(merged_data)

相关问题 更多 >