【问题标题】:Groupby two columns, sum, count and display output values in separate column (pandas)Groupby 两列,求和,计数并在单独的列中显示输出值(熊猫)
【发布时间】:2021-09-29 21:57:17
【问题描述】:

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

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

【问题讨论】:

  • 在我看来,所需的输出没有意义。由于 (1) 除了type 列之外,有些行的所有数据都为空,(2) 它没有任何存储成本。我建议只使用 1 行,并在唯一类型列表中使用 types 列,这是一个逗号分隔的列表。
  • 这将是理想的

标签: python pandas numpy


【解决方案1】:

根据作者的假设回答,合并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)

【讨论】:

    【解决方案2】:

    您可以使用.GroupBy.transform() 设置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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-16
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      相关资源
      最近更新 更多