我很难找到一种方法来重塑多索引(列)df 两种方式:(a) 除了一列之外,多索引的两个级别都被熔化了(b) 每一个 0 级柱都熔化了 1 级柱我可能已经发现 (a) 尽管可能不是最程序化的方式并且可以接近但没有雪茄 (b)例如,给定 DataFrame:df = pd.DataFrame({'dealer': {0: 'SF', 1: 'LA'}, 'col2': {0: 1, 1: 3}, 'col3': {0: 2, 1: 4}, 'col4': {0: 3, 1: 6}, 'col5': {0: 7, 1: 2}, })df.columns = [['Jan','Jan','Feb','Feb','dealer'], ['cars','trucks','cars','trucks','dealer']]Out[209]: Jan Feb dealer cars trucks cars trucks dealer0 1 2 3 7 SF1 3 4 6 2 LA我可以通过以下方式到达 (a):melted = df.melt(id_vars = 'dealer',col_level=0, var_name='month')melted['product']=df.melt(id_vars = 'dealer',col_level=1)['variable']melted.sort_values('dealer', inplace=True)meltedOut[211]: dealer month value product1 LA Jan 3 cars3 LA Jan 4 trucks5 LA Feb 6 cars7 LA Feb 2 trucks0 SF Jan 1 cars2 SF Jan 2 trucks4 SF Feb 3 cars6 SF Feb 7 trucks但似乎无法正确旋转以将 ['dealer','product','Jan','Feb'] 作为列标签,其中值在 Jan 和 Feb colspivotedd = pd.DataFrame({'dealer': {0: 'LA', 1: 'LA',2: 'SF', 3: 'SF'}, 'product': {0: 'cars', 1: 'trucks',2: 'cars', 3: 'trucks'}, 'Jan': {0: 3, 1: 4,2:1,3:2}, 'Feb': {0: 6, 1: 2,2:3,3:7}, })Out[215]: Feb Jan dealer product0 6 3 LA cars1 2 4 LA trucks2 3 1 SF cars3 7 2 SF trucks显然,我希望经销商和产品作为按时间顺序排列的第一列和日期(还没有阅读为什么 pd.dataframe 更改您输入数据的顺序),但这基本上是我所追求的。
1 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
你可以试试:
df.set_index('dealer').stack(1).reset_index().rename(columns={'level_1':'product'})
dealer product Feb Jan
0 (SF,) cars 3 1
1 (SF,) trucks 7 2
2 (LA,) cars 6 3
3 (LA,) trucks 2 4
添加回答
举报
0/150
提交
取消