gpt4 book ai didi

python - python(transpose)中如何基于单列展开数据?

转载 作者:行者123 更新时间:2023-11-28 16:32:23 27 4
gpt4 key购买 nike

我有一个如下所示的数据集,我需要单行中每个类别的所有不同权重和计数

Sample_data

category weights
1 aa 3.2
2 aa 2.2
3 aa 4.2
4 bb 3.5
5 bb 4.5
6 aa 0.5
7 cc 0.6
8 bb 7.5
9 cc 6.6
10 dd 2.2
11 aa 3.3
12 bb 4.4
13 cc 5.5
14 dd 6.6

我需要的是同一行中每个唯一类别的计数以及每个类别的不同权重。

Expected output:

category count weight1 weight2 weight3 weight4 weight5
1 aa 5 3.2 2.2 4.2 0.5 3.3
2 bb 4 3.5 4.5 7.5 4.4
3 cc 3 0.6 6.6 5.5
4 dd 2 2.2 6.6

我以为

sampledata['category'].groupby(level = 0)   

会工作,但不会。有人可以帮助我如何在 python 中执行此操作。

最佳答案

我可能会缩短这个但以下工作:

In [51]:

cat = df.groupby('category')['weights'].agg({'count':'count', 'weight_cat':lambda x: list(x)}).reset_index()
cat
Out[51]:
category count weight_cat
0 aa 5 [3.2, 2.2, 4.2, 0.5, 3.3]
1 bb 4 [3.5, 4.5, 7.5, 4.4]
2 cc 3 [0.6, 6.6, 5.5]
3 dd 2 [2.2, 6.6]
In [52]:

cat = cat.join(cat['weight_cat'].apply(lambda x: pd.Series(x)))
cat
Out[52]:
category count weight_cat 0 1 2 3 4
0 aa 5 [3.2, 2.2, 4.2, 0.5, 3.3] 3.2 2.2 4.2 0.5 3.3
1 bb 4 [3.5, 4.5, 7.5, 4.4] 3.5 4.5 7.5 4.4 NaN
2 cc 3 [0.6, 6.6, 5.5] 0.6 6.6 5.5 NaN NaN
3 dd 2 [2.2, 6.6] 2.2 6.6 NaN NaN NaN
In [68]:

rename_cols = [col for col in cat if type(col) == int]
rename_weight_cols = ['weight'+str(col + 1) for col in rename_cols]
d = dict(zip(rename_cols, rename_weight_cols))
cat.rename(columns = d,inplace=True)
cat
Out[68]:
category count weight_cat weight1 weight2 weight3 \
0 aa 5 [3.2, 2.2, 4.2, 0.5, 3.3] 3.2 2.2 4.2
1 bb 4 [3.5, 4.5, 7.5, 4.4] 3.5 4.5 7.5
2 cc 3 [0.6, 6.6, 5.5] 0.6 6.6 5.5
3 dd 2 [2.2, 6.6] 2.2 6.6 NaN

weight4 weight5
0 0.5 3.3
1 4.4 NaN
2 NaN NaN
3 NaN NaN

所以上面所做的是首先对“类别”列进行分组并对权重列执行聚合,我们创建一个计数列,然后我们将该组的所有值转换为一个列表并添加它。

然后我对该列表调用 apply 将它变成一个系列,这将自动生成列 0..4 的名称。

然后我创建一个字典,根据需要将列重命名为 weight1 到 5。

关于python - python(transpose)中如何基于单列展开数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30568304/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com