我有一个像这样的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笔记本会冻结,所以我希望有更好的方法!
答案 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)
方法2
scrollTop