2017-06-15 61 views
1

我有一个简单的数据集:有不同的名称结合起来一行一列大熊猫蟒蛇

import pandas as pd 


df = { 
    'columA':['1A','2A','3A','4A','5A','6A'], 
'count': [ 1, 12, 34, 52, '3',2], 
'columnB': ['a','dd','dd','ee','d','f'] 
} 


df = pd.DataFrame(df) 

它看起来像这样:

columA columnB count 
    1A  a  1 
    2A  dd 12 
    3A  dd 34 
    4A  ee 52 
    5A  d  3 
    6A  f  2 

更新:合并2A和3A的名称应该是像'SAB'或'2A plus 3A'等任意的东西,我以'2A | 3A'为例,它让一些人感到困惑。 我想总结一下计算行数2A和3A,并给它一个名称SAB 所需的输出:

columA columnB count 
    1A  a  1 
    SAB  dd 46 
    4A  ee 52 
    5A  d  3 
    6A  f  2 

回答

1

我们可以在columnB

df = {'columA':['1A','2A','3A','4A','5A','6A'], 
     'count': [ 1, 12, 34, 52, '3',2], 
     'columnB': ['a','dd','dd','ee','d','f']} 

df = pd.DataFrame(df) 

df.groupby('columnB').agg({'count': 'sum', 'columA': 'sum'}) 


     columA count 
columnB  
a  1A  1 
d  5A  3 
dd  2A3A 46 
ee  4A  52 
f  6A  2 

使用groupby如果您担心关于索引名称,你可以写一个像这样的函数。

def join_by_pipe(s): 
    return '|'.join(s) 

df.groupby('columnB').agg({'count': 'sum', 'columA': join_by_pipe}) 


     columA count 
columnB  
a  1A  1 
d  5A  3 
dd  2A|3A 46 
ee  4A  52 
f  6A  2 
+0

如何在过程中将2A3A重命名为2 | 3A?这只是一个示例数据集,但是这个部分对于我的真实数据集非常重要 – Jessica

+0

@Jessica我已经做了一个编辑以添加到您的管道中。解决方案取决于你是否总是有'A'或者是否有其他字母。将其编辑到您的问题中,我可以放弃它! – josh

+0

作为一个例子这个'def join_by_pipe(s): return'|'.join(s.str.replace('A',''))+'A''做你想要的,但它可能不会为你的数据集提供genrealise,如果你有,可以说'5B'为数值。 – josh