我需要按列子集进行分组,并计算其值的不同组合数。但是,还有其他列可能具有也可能没有不同的值,因此我想以某种方式将此信息保留在输出中。这是一个示例:
gb1 gb2 text1 text2
bebop skeletor blue fisher
bebop skeletor blue wright
rocksteady beast_man orange haldane
rocksteady beast_man orange haldane
tokka kobra_khan green lande
tokka kobra_khan red arnold
我仅要按gb1
和gb2
分组。
这是我需要的:
gb1 gb2 count text1 text2
bebop skeletor 2 blue fisher, wright
rocksteady beast_man 2 orange haldane
tokka kobra_khan 2 green, red lande, arnold
除了处理text1
和text2
列之外,我已经完成了所有工作。
谢谢。
答案 0 :(得分:3)
您可以使用
进行检查s=df.assign(count=1).groupby(['gb1','gb2']).agg({'count':'sum','text1':lambda x : ','.join(set(x)),'text2':lambda x : ','.join(set(x))}).reset_index()
s
gb1 gb2 count text1 text2
0 bebop skeletor 2 blue wright,fisher
1 rocksteady beast_man 2 orange haldane
2 tokka kobra_khan 2 green,red lande,arnold
答案 1 :(得分:2)
如果df
是您的原始数据帧:
def combine(xx):
dd = xx.transform(lambda x : ','.join(set(x)))
dd['count'] = len(xx)
return dd
ddf = df.groupby(['gb1', 'gb2']).apply(combine)
在示例数据帧中,ddf
为:
text1 text2 count
gb1 gb2
bebop skeletor blue fisher,wright 2
rocksteady beast_man orange haldane 2
tokka kobra_khan red,green lande,arnold 2