使用MultiIndex在数据框中插入新的列值?

时间:2016-12-16 15:33:36

标签: python pandas jupyter

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

          rank     num      rank    num
          2015     2015     2014    2014   
France    8        1200     9       1216   
Italy     11       789      10      788    

我想在多索引中添加一个名为corrected_num的新列,我希望此列的值为相应行的num值除以数字从另一个字典中获得,看起来像这样:

b = {2015: 10, 2014: 12}

换句话说,我想结束这样的事情:

          rank     num      num_corrected    rank    num    num_corrected
          2015     2015     2015             2014    2014   2014
France    8        1200     120              9       1216   101.3
Italy     11       789      78.9             10      788    65.6

到目前为止,我的方法是迭代数据框中的每一行,然后遍历行中的每一列,如下所示:

for i, row in df.iterrows():
    for year in df.num.columns:
        df.set_value(i, 'num_corrected, ' + year, row.frequency[year] / b[year])

但是当我尝试这个时,我的Jupyter笔记本会冻结,所以我希望有更好的方法!

1 个答案:

答案 0 :(得分:1)

设置

b

b = pd.Series({2015: 10, 2014: 12}) 成为系列

num_c = df.num / b

cols = num_c.columns
num_c.columns = [['num_corrected'] * len(cols), cols]

pd.concat([df, num_c], axis=1)

方法1

d1 = df.stack()
d1['num_corrected'] = d1.num / d1.index.get_level_values(1).to_series().map(b).values
d1.unstack().sort_index(axis=1, level=1)

enter image description here

方法2

scrollTop

enter image description here