根据另一列的groupby结果创建一个新列

时间:2019-08-28 08:41:21

标签: pandas pandas-groupby

我想从一列的唯一值中创建新列,并将唯一值的计数作为在行中分配的值。

df = pd.DataFrame([["a",20],["a", 10],["b", 5],["c",10],
    ["b", 10],["a", 5],["c",5],["c",5]],
columns=["alp","min"])

In [4]: df                                                                      
Out[4]: 
  alp  min
0   a   20
1   a   10
2   b    5
3   c   10
4   b   10
5   a    5
6   c    5
7   c    5

我尝试使用groupby来获取所需的值

In [8]: df.groupby('alp')['min'].count()                                        
Out[8]: 
alp
a    3
b    2
c    3
Name: min, dtype: int64

现在,我想从该输出中创建列。

   count_a count_b count_c
0    3        2      3

在熊猫中有实现此目的的功能吗?

1 个答案:

答案 0 :(得分:1)

通过Series.rename_axis删除系列名称,通过Series.to_frame转换为一列DataFrame,通过DataFrame.T进行转置,最后使用DataFrame.add_prefix

df = df.groupby('alp')['min'].count().rename_axis(None).to_frame(0).T.add_prefix('count_')
print (df)

   count_a  count_b  count_c
0        3        2        3

或为每个构造函数创建DataFrame

s = df.groupby('alp')['min'].count()

df = pd.DataFrame([s.values], columns='count_' + s.index.values)