我想从一列的唯一值中创建新列,并将唯一值的计数作为在行中分配的值。
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
在熊猫中有实现此目的的功能吗?
答案 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)