我有两个数据框,一个名为 ticker_performance
的基本代码 df 和另一个名为 market_performance
我想要一列显示基本代码是否超过了每 %_diff
的市场代码的表现 (Date
)。
这就是我想要的:
s = []
for i in market_performance.index:
diff = market_performance['%_diff'][i]
date = market_performance['Date'][i]
other_row = ticker_performance[ticker_performance['Date'] == date]
val = 'Y' if ((other_row['%_diff'].iloc[0] - diff) > 0) else 'N'
s.append(val)
market_performance['Beaten?'] = s
market_performance
然而这是非常低效的。有没有一种有效的方法来做到这一点?
示例数据:
ticker_performance = pd.read_json('{"ticker":{"0":"NET","1":"NET"},"Date":{"0":1612137600000,"1":1612224000000},"Open":{"0":77.75,"1":81.82},"Close":{"0":80.49,"1":83.57},"abs_diff":{"0":2.74,"1":1.75},"%_diff":{"0":3.52,"1":2.14}}')
market_performance = pd.read_json('{"ticker":{"0":"QQQ","1":"QQQ","2":"VOO","3":"VOO"},"Date":{"0":1612137600000,"1":1612224000000,"2":1612137600000,"3":1612224000000},"Open":{"0":318.11,"1":325.48,"2":343.63,"3":349.05},"Close":{"0":322.48,"1":327.76,"2":345.81,"3":350.69},"abs_diff":{"0":4.37,"1":2.28,"2":2.18,"3":1.64},"%_diff":{"0":1.37,"1":0.7,"2":0.63,"3":0.47}}')