首页 > 解决方案 > 聚合 pandas df 以获取 max 和 min 作为列

问题描述

我的数据框如下:

import pandas as pd
inp = [{'c1':10,'c2':100,'c3':100}, {'c1':10,'c2':100,'c3':110}, {'c1':10,'c2':100,'c3':120}, {'c1':11,'c2':100,'c3':100}, {'c1':11,'c2':100,'c3':110}, {'c1':11,'c2':100, 'c3':120}]
df = pd.DataFrame(inp)

这就是我聚合的方式

new_df = df.groupby(['c1', 'c2']).agg({"c3": [min,max]}) 

但输出并不符合我的预期。我的期望如下:

inp = [{'c1':10, 'c2':100,'c3_min':100, 'c3_max':120},  {'c1':11, 'c2':100,'c3_min':100, 'c3_max':120}]
df = pd.DataFrame(inp)

我究竟做错了什么?我怎样才能达到我的预期输出?

标签: pandas

解决方案


尝试:

# tell Pandas to use the vectorized functions with `'min', 'max'` 
# instead of `min` and `max`
new_df = df.groupby('c1', as_index=False)['c2'].agg(['min','max'])

或匹配输出:

new_df = (df.groupby('c1')['c2']
            .agg(['min','max'])
            .add_prefix('c2_')
            .reset_index()
         )

推荐阅读