我有一个包含>100 variables
的数据集,但是为了说明这个问题,我将其简化如下。
我想groupby()
colA
,colB
和sum()
colD
,同时取colC
和{{1} }
我尝试了以下操作,但是您会知道,这只会返回我已分组的列以及我累加的列,并且永远不会返回colE
和colC
方法1:
colE
方法2::我可以像上面那样汇总它们,然后稍后将其加入同一张表中以获得结果。
方法3::groupby中具有所有列,但是这样做时,我无法像df.groupby(['colA','colB').aggregate({'colC': sum})
中那样对Missing
的值进行分组。 >
我有什么选择?
更正 更新:我刚刚更正了前面介绍数据的方式,这是不正确的
colE
`
答案 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})