python - 我怎样才能在 pandas 中的 pivot_table 之后得到一列多级索引?

标签 python pandas

数据框:

df = pd.DataFrame({
    'date': [1,1,2,2,3,4,4],
    'id': [1,1,1,2,2,2,3],
    'item': [200,201,200,333,334,334,444],
    'buy': [1,1,2,5,4,0,1]
})

df = df[['date','id','item','buy']]


date    id  item    buy
0   1   1   200     1
1   1   1   201     1
2   2   1   200     2
3   2   2   333     5
4   3   2   334     4
5   4   2   334     0
6   4   3   444     1

方法一:

df2 = df.pivot_table(index=['id','item'], columns=['date'], aggfunc='sum', fill_value=0).reset_index()

    id  item    buy
date            1   2   3   4
0   1   200     1   2   0   0
1   1   201     1   0   0   0
2   2   333     0   5   0   0
3   2   334     0   0   4   0
4   3   444     0   0   0   1

如何获得“购买”列的“1”或“2”或“3”或“4”列?

我的试验是像这样重命名列的名称。

df2.columns = ["".join((str(i),str(j))) for i,j in df2.columns]

    id  item    buy1    buy2    buy3    buy4
0   1   200     1       2       0       0
1   1   201     1       0       0       0
2   2   333     0       5       0       0
3   2   334     0       0       4       0
4   3   444     0       0       0       1

和 df2['buy1'], df2.buy2... 这就是我想要的

这是我的问题。

如何在 pandas 中的 pivot_table 之后获取多级索引列?直接在多层结构上,无需重命名...


方法二:

df2 = df.groupby(['id','item','date']).buy.sum().unstack(fill_value=0).reset_index() df2.columns.names=['']

    id  item    1   2   3   4
0   1   200     1   2   0   0
1   1   201     1   0   0   0
2   2   333     0   5   0   0
3   2   334     0   0   4   0
4   3   444     0   0   0   1

如果像方法 2 那样使用 groupby 和 unstack,我可以避免多级索引问题,不过

但我仍然想知道在数据透视表之后获取多级索引列的方法。

最佳答案

对于pivot,你可以指出values,然后你就会收到你想要的

df.pivot_table(index=['id','item'], columns=['date'], values='buy',aggfunc='sum', fill_value=0).reset_index()
Out[64]: 
date  id  item  1  2  3  4
0      1   200  1  2  0  0
1      1   201  1  0  0  0
2      2   333  0  5  0  0
3      2   334  0  0  4  0
4      3   444  0  0  0  1

关于python - 我怎样才能在 pandas 中的 pivot_table 之后得到一列多级索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48493726/

相关文章:

python - Pandas :根据在其他列上应用字符串条件创建列

python - numpy in1d 返回不正确的结果?

python 多个列表,AND函数,然后创建新列表

python - 如何使用 Python 运行程序数百次?

python - 仅获取最低值的重复列

python - Pandas 部分转置

javascript - 如何将 Django API 项目与 Nodejs 集成并在前端使用react?

python - 我的Python计数器代码不一致,有人可以修复它吗?

python - python 中“模块”对象没有属性 'date_range'

python - 在Python中按日期和时间索引和切片数据帧