如何汇总某些列,同时将其他列保留在Python中

时间:2019-07-19 14:35:21

标签: python pandas pandas-groupby

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

enter image description here

我想groupby() colAcolBsum() colD,同时取colC和{{1} }

我尝试了以下操作,但是您会知道,这只会返回我已分组的列以及我累加的列,并且永远不会返回colEcolC

方法1: colE

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

方法3::groupby中具有所有列,但是这样做时,我无法像df.groupby(['colA','colB').aggregate({'colC': sum})中那样对Missing的值进行分组。 >

我有什么选择?

更正 更新:我刚刚更正了前面介绍数据的方式,这是不正确的

colE

`

3 个答案:

答案 0 :(得分:0)

似乎需要

df['New']=df.groupby(['colA','colB'])['colC'].transform('sum')

答案 1 :(得分:0)

  

我想对groupC()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}      |

答案 2 :(得分:0)

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

df['colE'] = df['colE'].fillna(-1)# I replaced all NaN with -1 to avoid `function not reduce error`

df.groupby(['colA','colB']).aggregate({'colD':sum,'colC':np.unique,'colE':np.unique})