重塑 Pandas 数据框,其中包含一列中的所有年份和跨多列分隔的月份

我有一个数据框,其中包含不同年份不同时间段内每种产品的销售额:


df = pd.DataFrame({'Product': {0: '1', 1: '1', 2: '2', 3: '2'},

                   'Year': {0: 2000, 1: 2001, 2: 2001, 3:2002},

                   'Jan-Feb': {0: 2, 1: 4, 2: 2, 3:4},

                    'Mar-Apr': {0: 1, 1: 2, 2: 1, 3:6}})

df有产品 分别有产品 1 和 2 的销售额year,但一年内的时间段显示在不同的列中。在本例中,我展示了两列,但还有四列代表一年内连续两个月的剩余时间段。


我想重塑df成这样:


df2 = pd.DataFrame({'Product': {0: '1', 1: '1', 2: '1', 3: '1', 4: '2', 5: '2', 6: '2', 7: '2'},

                   'Year': {0: 2000, 1: 2000, 2: 2001, 3:2001,4: 2001, 5: 2001, 6: 2002, 7:2002},

                   'Period': {0: 'Jan-Feb', 1: 'Mar-Apr', 2: 'Jan-Feb', 3:'Mar-Apr', 4: 'Jan-Feb', 5: 'Mar-Apr', 6: 'Jan-Feb', 7:'Mar-Apr'},

                   'Sales': {0: 2, 1: 1, 2: 4, 3: 2, 4: 2, 5: 1, 6: 4, 7: 6}})

在本例中,月份期间全部位于一列中,销售额位于另一列中。我尝试过不同形式的重塑,但我显然错过了一些东西,因为我还没有成功地找到一种能够满足我想要的效果的方法。


largeQ
浏览 94回答 2
2回答

子衿沉夜

检查与meltout = df.melt(['Product','Year'], var_name = 'Period', value_name = 'Sales')  Product  Year   Period  Sales0       1  2000  Jan-Feb      21       1  2001  Jan-Feb      42       2  2001  Jan-Feb      23       2  2002  Jan-Feb      44       1  2000  Mar-Apr      15       1  2001  Mar-Apr      26       2  2001  Mar-Apr      17       2  2002  Mar-Apr      6

汪汪一只猫

用途stack():df = df.set_index(['Product','Year']).stack(0).reset_index()df.columns = ['Product','Year','Period','Sales']输出:  Product  Year   Period  Sales0       1  2000  Jan-Feb      21       1  2000  Mar-Apr      12       1  2001  Jan-Feb      43       1  2001  Mar-Apr      24       2  2001  Jan-Feb      25       2  2001  Mar-Apr      16       2  2002  Jan-Feb      47       2  2002  Mar-Apr      6
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python