Ale*_*lex 1 python dataframe pandas
我尝试生成一个新的数据帧(expected_result),它基于两个现有的数据帧(排名、值)和一个过滤器。两个现有的数据名具有相同的标头和索引。如果数据帧“rank”中的值等于或小于filter_var,则新数据帧应显示数据帧“value”的值。如果排名高于filter_var = show "nan"
import pandas as pd
#df 1 Rank
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
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
filter_var = 2 #better or equal
#expecet result
results = {'Stock A':[101, 102, 103, 104],
'Stock B':['nan', 'nan', 'nan' , 'nan'],
'Stock C':['nan', 'nan', 'nan', 103],
'Stock D':[100, 100, 100, 'nan'],
}
#example results
expected_result = pd.DataFrame(results)
Run Code Online (Sandbox Code Playgroud)
感谢帮助
pandas将在索引上自动对齐,因此由于您有相同的索引index,因此您可以通过简单的方法来实现:
>>> value[rank.le(2)]
Stock A Stock B Stock C Stock D
0 101 NaN NaN 100.0
1 102 NaN NaN 100.0
2 103 NaN NaN 100.0
3 104 NaN 103.0 NaN
# Create a new DF
res = value[rank.le(2)]
Run Code Online (Sandbox Code Playgroud)
pandas.le比较 DataFrames 是否小于或等于row明智或column明智。
括号中的代码返回一个布尔值 DataFrame,显示True值何时小于或等于 2:
>>> rank.le(2)
Stock A Stock B Stock C Stock D
0 True False False True
1 True False False True
2 True False False True
3 True False True False
Run Code Online (Sandbox Code Playgroud)
DFboolean以及您的 DF 共享相同的事实index,允许您选择[]具有所需值的行。因此为什么:
value[rank.le(2)]
Run Code Online (Sandbox Code Playgroud)
作品。