gpt4 book ai didi

python - pandas 将行数据转换为列数据

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:24 28 4
gpt4 key购买 nike

我有一个像这样的数据框:

user_id category    view    collect
1 1 a 2 3
2 1 b 5 9
3 2 a 8 6
4 3 a 7 3
5 3 b 4 2
6 3 c 3 0
7 4 e 1 4

如何将其更改为新的dataframe,每个user_id可以出现一次,然后带有view和collect的类别出现在列中,如果没有数据,则填充0,如下所示:

user_id a_view  a_collect   b_view  b_collect   c_view  c_collect   d_view  d_collect   e_view  e_collect
1 2 3 5 6 0 0 0 0 0 0
2 8 6 0 0 0 0 0 0 0 0
3 7 3 4 2 3 0 0 0 0 0
4 0 0 0 0 0 0 0 0 1 4

最佳答案

可以通过pivoting df获得想要的结果,user_id 中的值成为索引,category 中的值成为列级别:

import numpy as np
import pandas as pd
df = pd.DataFrame({'category': ['a', 'b', 'a', 'a', 'b', 'c', 'e'],
'collect': [3, 9, 6, 3, 2, 0, 4],
'user_id': [1, 1, 2, 3, 3, 3, 4],
'view': [2, 5, 8, 7, 4, 3, 1]})

result = (df.pivot(index='user_id', columns='category')
.swaplevel(axis=1).sortlevel(axis=1).fillna(0))

产量

category    a            b            c            e        
view collect view collect view collect view collect
user_id
1 2.0 3.0 5.0 9.0 0.0 0.0 0.0 0.0
2 8.0 6.0 0.0 0.0 0.0 0.0 0.0 0.0
3 7.0 3.0 4.0 2.0 3.0 0.0 0.0 0.0
4 0.0 0.0 0.0 0.0 0.0 0.0 1.0 4.0

上面,result 有一个 MultiIndex。一般来说,我认为这应该优于扁平化的单一索引,因为它保留了更多的数据结构。

但是,MultiIndex 可以扁平化为单个索引:

result.columns = ['{}_{}'.format(cat,col) for cat, col in result.columns]
print(result)

产量

         a_view  a_collect  b_view  b_collect  c_view  c_collect  e_view  \
user_id
1 2.0 3.0 5.0 9.0 0.0 0.0 0.0
2 8.0 6.0 0.0 0.0 0.0 0.0 0.0
3 7.0 3.0 4.0 2.0 3.0 0.0 0.0
4 0.0 0.0 0.0 0.0 0.0 0.0 1.0

e_collect
user_id
1 0.0
2 0.0
3 0.0
4 4.0

关于python - pandas 将行数据转换为列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537399/

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