我嘗試生成一個新的資料框架(expected_result),它基于兩個現有的資料框架(rank,value)和一個過濾器。這兩個現有的資料框架有相同的頭和索引。如果資料框架 "rank "中的值等于或小于過濾器_var,新的資料框架應該顯示資料框架 "value "的值。如果排名高于過濾器_var=顯示 "nan"
import pandas as pd
#df 1 排名 as pd
ranking = {'Stock A':[1, 1, 1, 1] 。
'Stock B':[3, 3, 4, 4] 。
'Stock C':[4, 4, 3, 2] 。
'Stock D':[2, 2, 2, 3] 。
}
rank = pd.DataFrame(ranking)
#df 2 values[/span
values = {'Stock A':[101, 102, 103, 104] 。
'Stock B':[99, 99, 99 , 99] 。
'Stock C':[99, 98, 100, 103] 。
'Stock D':[100, 100, 100, 102] 。
}
value = pd.DataFrame(values)
#Filter[/span
filter_var = 2 #better or equal
#expecet result[/span
結果 = {'Stock A':[101, 102, 103, 104] 。
'股票B':['楠', '楠', '楠' , '楠'] 。
'Stock C':['nan', 'nan', 'nan', 103] 。
'Stock D':[100, 100, 100, 'nan'] 。
}
#example results
感謝您的幫助
uj5u.com熱心網友回復:
既然你有相同的索引,你可以通過一個簡單的實作:
value[rank.le(2]
股票A 股票B 股票C 股票D
0 101 NaN NaN 100.0
1 102 NaN NaN100.0
2 103 NaN NaN 100.0
3 104 NaN 103.0 NaN
#創建一個新的DF
res = value[rank.le(2) ]
pandas.le比較DataFrames的小于不平等的元素
給大家介紹一下,括號里的代碼回傳一個布爾運算的DataFrame,當一個值小于或等于2時,顯示
True:
>>> rank.le(2)
股票A 股票B 股票C 股票D
0 True False False True
1 True False False True
2 True False False True
3 True False True False
這一點,再加上你的DF共享相同的索引,允許你選擇具有你想要的值的行。這就是為什么:
value[rank.le(2) ]
作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/323999.html
標籤:
