我是python的新手,拥有2个(大)未堆叠的pandas数据帧,其中日期为行和列为ids。第一个数据帧包含某些值,而第二个数据帧包含每个值的(行)排名。当值本身满足条件时,我想用行中值替换排名值。
这是问题(假设dfval包含浮点数):
dfrank = (dfval).rank(axis=1,method='first',ascending=False)
这似乎没问题。然后我想做一些像
这样的事情dfrank[ dfval < 0.546 ] = dfrank.median(axis=1)
失败了。我找不到合适的解决方案,我认为我搞乱了索引?
非常感谢!
答案 0 :(得分:1)
np.random.seed(100)
dfval = pd.DataFrame(np.random.rand(5,5), columns=list('ABCDE'))
print (dfval)
A B C D E
0 0.543405 0.278369 0.424518 0.844776 0.004719
1 0.121569 0.670749 0.825853 0.136707 0.575093
2 0.891322 0.209202 0.185328 0.108377 0.219697
3 0.978624 0.811683 0.171941 0.816225 0.274074
4 0.431704 0.940030 0.817649 0.336112 0.175410
dfrank = (dfval).rank(axis=1,method='first',ascending=False)
print (dfrank)
A B C D E
0 2.0 4.0 3.0 1.0 5.0
1 5.0 2.0 1.0 4.0 3.0
2 1.0 3.0 4.0 5.0 2.0
3 1.0 3.0 5.0 2.0 4.0
4 3.0 1.0 2.0 4.0 5.0
print (dfrank.median(axis=1))
0 3.0
1 3.0
2 3.0
3 3.0
4 3.0
dtype: float64
dfrank = dfrank.mask(dfval < 0.546 , dfrank.median(axis=1), axis=0)
print (dfrank)
A B C D E
0 3.0 3.0 3.0 1.0 3.0
1 3.0 2.0 1.0 3.0 3.0
2 1.0 3.0 3.0 3.0 3.0
3 1.0 3.0 3.0 2.0 3.0
4 3.0 1.0 2.0 3.0 3.0