[英]Pandas Dataframe : Assigning conditional values to each dataframe row on values greater than or lower than
目前我有 dataframe 有股票行情和回报
ticker_name return
"AAPL 2020" -15%
"AAPL 2019" 20%
"AAPL 2018" 40%
"AAPL 2017" 30%
"AAPL 2016" -10%
....
我还有过去 x 年的年度格式的指数回报数据。如果特定股票的回报高于市场回报,我想用这些数据标记
sp_500_year return
"2020" -30%
"2019" 10%
"2018" 10%
"2017" 10%
"2016" 20%
....
预期的 output 是新列,它们是 boolean 格式的标签。 1 如果他们的回报高于市场,0 如果他们表现逊于市场。
ticker_name return above_market
"AAPL 2020" -15% 1
"AAPL 2019" 20% 1
"AAPL 2018" 40% 1
"AAPL 2017" 30% 1
"AAPL 2016" -10% 0
....
首先,我建议将您的ticker_name
列分成两列。
在df_ticker
下方存储您的第一个 DataFrame 以及股票代码、年份和回报。 这里Series.str.split()
方法用于从年份中拆分代码,然后我们使用此处描述的技巧Python pandas 将列列表拆分为多个列。
df_ticker = df_ticker.join(pd.DataFrame(df_ticker['ticker_name'].str.split().tolist(), columns=['ticker', 'year']))
创建了两个新列:
ticker_name return ticker year
0 AAPL 2020 -0.15 AAPL 2020
1 AAPL 2019 0.20 AAPL 2019
2 AAPL 2018 0.40 AAPL 2018
3 AAPL 2017 0.30 AAPL 2017
4 AAPL 2016 -0.10 AAPL 2016
然后我建议将年份设置为索引,这将简化 DataFrame 之间的比较。
df_ticker = df_ticker.set_index('year')
赠款:
ticker_name return ticker
year
2020 AAPL 2020 -0.15 AAPL
2019 AAPL 2019 0.20 AAPL
2018 AAPL 2018 0.40 AAPL
2017 AAPL 2017 0.30 AAPL
2016 AAPL 2016 -0.10 AAPL
和
df_index = df_index.set_index('sp_500_year')
赠款
return
sp_500_year
2020 -0.3
2019 0.1
2018 0.1
2017 0.1
2016 0.2
现在您可以安全地比较两个 DataFrame
df_ticker['above_index'] = df_ticker['return'] > df_index['return']
ticker_name return ticker above_index
year
2020 AAPL 2020 -0.15 AAPL True
2019 AAPL 2019 0.20 AAPL True
2018 AAPL 2018 0.40 AAPL True
2017 AAPL 2017 0.30 AAPL True
2016 AAPL 2016 -0.10 AAPL False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.