首页 > 解决方案 > 如何聚合某些列,同时将其他列保留在 Python 中

问题描述

我有一个数据集,其中包含>100 variables但为了说明问题,我将其简化如下。

在此处输入图像描述

我想groupby() colA, colBand sum() colD, 同时采用 and 的不同colCcolE

我已经尝试过以下方法,但正如您所知,这只会返回我分组的列以及我总结的列并且永远不会返回colC并且colE

方法1: df.groupby(['colA','colB').aggregate({'colC': sum})

方法2:我可以像上面那样聚合它们,然后稍后将其加入同一个表以获得结果。

方法 3:在 groupby 中包含所有列,但是当我这样做时,我无法按Missing您可以在其中看到的值进行分组colE

我有哪些选择?

更正 更新:我刚刚更正了我之前提供数据的方式,这是不正确的

data = [
    ["25-5-19", "cat1", "cat3", 10, 1],
    ["25-5-19", "cat1", "cat3", 20, 1],
    ["25-5-19", "cat1", "cat3", 30, 1],
    ["26-5-19", "cat2", "cat4", 50, 2],
    ["26-5-19", "cat2", "cat4", 100, 2],
    ["26-5-19", "cat2", "cat4", 10, 2],
    ["27-5-19", "cat1", "cat5", 40, None],
    ["27-5-19", "cat1", "cat5", 60, None]
] 

`

标签: pythonpandaspandas-groupby

解决方案


我想 groupby() colA,colB 和 sum() colD,同时采用 colC 和 colE 的不同值

所以我相信你可以set在聚合器中使用,reset_index()完成后:

# dataframe data from example (+ extra `cat1` in ColC)
data = [
    ["25-5-19", "cat1", "cat1", 10, 1],
    ["25-5-19", "cat1", "cat3", 20, 1],
    ["25-5-19", "cat1", "cat3", 30, None],
    ["26-5-19", "cat2", "cat4", 50, 2],
    ["26-5-19", "cat2", "cat4", 100, 2],
    ["26-5-19", "cat2", "cat4", 10, 2]
] 

df = pd.DataFrame(data, columns = ['colA', 'colB', 'colC', 'colD', 'colE']) 

# aggregator sums over `colD` and gets distinct values of `colC` and `colE`
df.groupby(['colA', 'colB']).aggregate({'colD': sum, 'colC': set, 'colE': set}).reset_index()


| - | colA  |colB   | colE         | colD   | colC          |
|---|-------|-------|--------------|--------|---------------|
|0  |25-5-19|  cat1 |   {nan, 1.0} |  60    |  {cat3, cat1} |
|1  |26-5-19|  cat2 |   {2.0}      |  160   |   {cat4}      |

推荐阅读