繁体   English   中英

Pandas Dataframe:将条件值分配给每个 dataframe 行的值大于或小于

[英]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
....



我发现了一个与我类似的问题,但是这个问题是比较字符串并且只有两个可能的输入(BULL 和 BEAR),而我的是浮动和变化(索引返回)。

Pandas:如果 A 列中的行包含“x”,则将“y”写入 B 列中的行

首先,我建议将您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM