Python Pandas: 转换多重索引数据框

1 投票
1 回答
566 浏览
提问于 2025-04-18 08:21

我有一个数据集,它是一个带有多重索引的pandas数据框:

                       cnt                                    
loginsmonth     2014-02-01  2014-03-01  2014-04-01  2014-05-01
app regmonth                                                  
1   2014-02-01        6069        1837         107          54
    2014-03-01           0       10742        2709        1387
    2014-04-01           0           0        5584        1103
    2014-05-01           0           0           0        5584

我需要把它转换成与对角线相关的百分比值:

                       cnt                                    
loginsmonth     2014-02-01  2014-03-01  2014-04-01  2014-05-01
app regmonth                                                  
1   2014-02-01   6069/6069   1837/6069    107/6069     54/6069
    2014-03-01           0 10742/10742  2709/10742  1387/10742
    2014-04-01           0           0   5584/5584   1103/5584
    2014-05-01           0           0           0   5584/5584

1 个回答

1

如果你不介意调整对角线的位置,可以这样做:

#create dataset
data = pd.DataFrame({'2014-02-01': [6069,0,0,0], '2014-03-01': [1837,1042,0,0], '2014-04-01': [107,209,5584,0], '2014-05-01': [54,1387,1103,5384]}, index = [[1,1,1,1], ['2014-02-01', '2014-03-01', '2014-04-01', '2014-05-01']], columns = ['2014-02-01', '2014-03-01', '2014-04-01', '2014-05-01'])

#transpose dataset
data = data.T

#compute percentages
for x, col in enumerate(data):
    data[col] = [item/data[col][x] for item in data[col]]

#you can always re transpose back!
data = data.T

撰写回答