首页 > 解决方案 > 按 id 汇总多个字符串列 - python

问题描述

我在 Python 中得到了以下数据框:

d = pd.DataFrame({'id': [1, 1, 1, 2, 2, 3],
              'col1': ['normal', 'well', 'normal', 'normal', 'well', 'normal'],
              'col2': ['bad', 'normal','normal', 'normal', 'normal', 'bad']})

我想按 id 汇总,但如果没有其他内容(“好”或“坏”),则保留“正常”或“正常”以外的列字符串。如下所示:

result = pd.DataFrame({'id': [1, 2, 3],
                'col1': ['well', 'well', 'normal'],
                'col2': ['bad', 'normal', 'bad']})

我正在考虑排序,然后使用 groupby 和 .first 但不确定如何在每列的顶部获得所需的级别。

标签: pythonpandas

解决方案


使用分类定义顺序

cats = ['well', 'bad', 'normal']
d = d.assign(
    col1=pd.Categorical(d.col1, cats, ordered=True),
    col2=pd.Categorical(d.col2, cats, ordered=True)
)

d.groupby('id', as_index=False).min()

   id    col1    col2
0   1    well     bad
1   2    well  normal
2   3  normal     bad

推荐阅读