【发布时间】:2014-10-18 17:52:38
【问题描述】:
有人可以帮我完成这项任务吗? 我通过 unstack() 操作在多级数据框中有数据:
Original df:
Density Length Range Count
15k 0.60 small 555
15k 0.60 big 17
15k 1.80 small 141
15k 1.80 big 21
15k 3.60 small 150
15k 3.60 big 26
20k 0.60 small 5543
20k 0.60 big 22
20k 1.80 small 553
20k 1.80 big 25
20k 3.60 small 422
20k 3.60 big 35
df = df.set_index(['Density','Length','Range']).unstack('Range')
# After unstack:
Count
Range big small
Density Length
15k 0.60 17 555
1.80 21 141
3.60 26 150
20k 0.60 22 5543
1.80 25 553
3.60 35 422
现在我尝试在级别 1 中添加一个额外的列。它是小/大的比率。我尝试了以下语法,没有错误但结果不同
#df[:]['ratio']=df['Count']['small']/df['Count']['big'] ## case 1. no error, no ratio
#df['Count']['ratio']=df['Count']['small']/df['Count']['big'] ## case 2. no error, no ratio
#df['ratio']=df['Count']['small']/df['Count']['big'] ## case 3. no error, ratio on column level 0
df['ratio']=df.ix[:,1]/df.ix[:,0] ## case 4. no error, ratio on column level 0
#After execution above code, df:
Count ratio
Range big small
Density Length
15k 0.60 17 555 32.65
1.80 21 141 6.71
3.60 26 150 5.77
20k 0.60 22 5543 251.95
1.80 25 553 22.12
3.60 35 422 12.06
我不明白为什么案例 1 和 2 没有显示错误,也没有添加新的比率列。以及为什么在案例 3 和 4 中,比率列位于 0 级,而不是预期的 1 级。还想知道是否有更好/更简洁的方法来实现这一点。案例 4 是我能做的最好的事情,但我不喜欢隐式索引方式(而不是使用名称)来引用列。
谢谢
【问题讨论】:
标签: python pandas indexing multi-level