为列pandas python组合不同名称的行

时间:2017-06-15 20:50:26

标签: python pandas

我有一个示例数据集:

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 个答案:

答案 0 :(得分:1)

我们可以在columnB上使用groupby

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

如果您关心索引名称,可以编写类似的函数。

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