Pandas GroupBy列名

时间:2018-04-19 16:47:35

标签: python pandas pandas-groupby

我有一个数据框,我们可以通过

代理
df = pd.DataFrame({'a':[1,0,0], 'b':[0,1,0], 'c':[1,0,0], 'd':[2,3,4]})

和类别系列

category = pd.Series(['A', 'B', 'B', 'A'], ['a', 'b', 'c', 'd'])

我希望将df的列的总和分为A' A' B' B'。也许是这样的:

result = df.groupby(??, axis=1).sum()

返回

result = pd.DataFrame({'A':[3,3,4], 'B':[1,1,0]})

3 个答案:

答案 0 :(得分:4)

在列上使用groupby + sum(此处axis=1非常重要):

df.groupby(df.columns.map(category.get), axis=1).sum()

   A  B
0  3  1
1  3  1
2  4  0

答案 1 :(得分:3)

reindex之后,您可以将类别分配给df

df=df.reindex(columns=category.index)
df.columns=category
df.groupby(df.columns.values,axis=1).sum()
Out[1255]: 
   A  B
0  3  1
1  3  1
2  4  0

pd.Series.get

df.groupby(category.get(df.columns),axis=1).sum()
Out[1262]: 
   A  B
0  3  1
1  3  1
2  4  0

答案 2 :(得分:0)

这是我对具有相似列名的数据框进行分组的方法

data_df:

1    1    2   1

q    r   f    t

代码:

df_grouped = data_df.groupby(data_df.columns, axis=1).agg(lambda x: ' '.join(x.values))

df_grouped:

1       2
q r t   f