如何为pandas groupby结果指定列标题?

时间:2017-09-07 05:00:41

标签: python pandas dataframe group-by

我需要分组,然后以连接的形式返回列的值。虽然我已设法这样做,但返回的数据框的列名为0.只有0.有没有办法指定结果。

    all_columns_grouped = all_columns.groupby(['INDEX','URL'], as_index  = False)['VALUE'].apply(lambda x: ' '.join(x)).reset_index()

生成的groupby对象具有标题

    INDEX | URL | 0

结果在0列中。 虽然我已设法使用

重命名列
   .rename(index=str, columns={0: "variant"}) this seems very in elegant. 

是否可以为列提供标题?感谢

2 个答案:

答案 0 :(得分:3)

最简单的是删除as_index = False以返回Series并将参数name添加到reset_index

样品:

all_columns = pd.DataFrame({'VALUE':['a','s','d','ss','t','y'],
                   'URL':[5,5,4,4,4,4],
                   'INDEX':list('aaabbb')})

print (all_columns)
  INDEX  URL VALUE
0     a    5     a
1     a    5     s
2     a    4     d
3     b    4    ss
4     b    4     t
5     b    4     y

all_columns_grouped = all_columns.groupby(['INDEX','URL'])['VALUE'] \
                                 .apply(' '.join) \
                                 .reset_index(name='variant')

print (all_columns_grouped)
  INDEX  URL variant
0     a    4       d
1     a    5     a s
2     b    4  ss t y

答案 1 :(得分:1)

当应用于列(在本例中为agg)时,可以使用VALUE将列名称指定给函数的结果。

# Sample data (thanks @jezrael)
all_columns = pd.DataFrame({'VALUE':['a','s','d','ss','t','y'],
                   'URL':[5,5,4,4,4,4],
                   'INDEX':list('aaabbb')})

# Solution
>>> all_columns.groupby(['INDEX','URL'], as_index=False)['VALUE'].agg(
        {'variant': lambda x: ' '.join(x)})
  INDEX  URL variant
0     a    4       d
1     a    5     a s
2     b    4  ss t y