gpt4 book ai didi

python - 如何在 Pandas 中 reshape 数据框?

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:09 25 4
gpt4 key购买 nike

我正在研究数据集上的一些机器学习。我对 python 中的 pandas/numpy 很陌生。所以我无法找出解决方案。我有一个使用 pandas 的 read_csv 函数获得的数据框。数据框类似于下图

ID   ATTR  QUANTITY
17 203 14
17 201 8
17 111 1
159 80 5
178 82 16

我希望这个数据框像这样 reshape /扁平化:

    ID  | attr1 | attr2 | attr3 | totalQuantity..................goes on
===========================================================
17 | 203 | 201 | 111 | 23 (i.e sum where id == 17)
159 | 80 | 0 | 0 | 5
178 | 82 | 0 | 0 | 16
....

一段代码受到高度赞赏。提前致谢

最佳答案

首先创建列 att 以按 cumcount 旋转然后使用 pivot对于 df1groupbysum对于 df2。最后 merge df1df2fillna通过 0:

print df
ID ATTR QUANTITY
0 17 203 14
1 17 201 8
2 17 111 1
3 17 203 14
4 17 201 8
5 17 111 1
6 17 203 14
7 17 201 8
8 17 111 1
9 17 203 14
10 17 201 8
11 17 111 1
12 159 80 5
13 178 82 16

#add column att for counting groups items
df['att'] = df.groupby('ID')['ID'].cumcount() + 1
#pivot df with column att
df1 = df.pivot(index='ID', columns='att', values='ATTR').reset_index()
#add string 'attr' to columns names
df1.columns = [df1.columns[0]] + ['attr' + str(col) for col in df1.columns[1:]]
df2 = df.groupby('ID')['QUANTITY'].sum().reset_index()
#merge with sum
print pd.merge(df1, df2 , on=['ID']).fillna(0)
    ID  attr1  attr2  attr3  attr4  attr5  attr6  attr7  attr8  attr9  attr10  \
0 17 203 201 111 203 201 111 203 201 111 203
1 159 80 0 0 0 0 0 0 0 0 0
2 178 82 0 0 0 0 0 0 0 0 0

attr11 attr12 QUANTITY
0 201 111 92
1 0 0 5
2 0 0 16

关于python - 如何在 Pandas 中 reshape 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35453083/

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