获取列中值的日期时间索引

2024-10-01 00:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个技术分析项目,我需要为买入/卖出信号的matplotlib图表添加注释。当我从yfinance模块获取数据时,我的DataFrame中自动有一个DateTimeIndex。 我的DataFrame看起来像这样:

Date        Close       Upper       SMA         Lower       Buy  Sell
2020-05-21  231.389999  219.042175  207.178002  195.313829  NaN  231.389999 
2020-05-22  234.910004  222.051354  209.420002  196.788650  NaN  234.910004
2020-05-26  232.199997  224.164115  211.655002  199.145889  NaN  NaN  
2020-05-27  229.139999  225.151643  213.966502  202.781360  NaN  NaN 
2020-05-28  225.460007  226.004370  215.530002  205.055633  NaN  NaN
2020-05-29  225.089996  226.911921  216.549001  206.186082  NaN  NaN
2020-06-01  231.910004  228.365279  218.031001  207.696723  NaN  NaN 

当Sell/Buy列中有一个notNaN值时,我想得到它的Date

因此,如果售价是231.389999,我想要的日期是2020-05-21

So far I have tried:

for i in range(0, len(df['Sell'])):
    if pd.notnull(df['Buy'][i]):
        date = df[df['Buy'] == i].index 

But I get an empty list: DatetimeIndex([], dtype='datetime64[ns]', name='Date', freq=None)

一旦我得到了Date值,我就可以输入is作为x-axis值,y-axis值将是注释图表的notNaN

获得DateTimeIndex的正确方法是什么


Tags: 项目dataframedfdate信号matplotlib图表buy
3条回答

等同于您的代码:

>>> pd.DatetimeIndex(df.loc[df["Sell"].notna(), "Date"])
DatetimeIndex(['2020-05-21', '2020-05-22'], dtype='datetime64[ns]', name='Date', freq=None)

您可以通过布尔掩蔽、notna()和按位或'|'方法来实现这一点:

result=df[(df['Buy'].notna()) | (df['Sell'].notna())]

您还可以通过布尔掩蔽、notna()any()方法来实现这一点:

result=df[df[['Buy','Sell']].notna().any(1)]

现在,如果您打印result.index,您将获得:

DatetimeIndex(['2020-05-21', '2020-05-22'], dtype='datetime64[ns]', name='Date', freq=None)

现在如果您打印result,您将得到:

             Close      Upper       SMA         Lower       Buy     Sell
Date                        
2020-05-21  231.389999  219.042175  207.178002  195.313829  NaN     231.389999
2020-05-22  234.910004  222.051354  209.420002  196.788650  NaN     234.910004

现在如果你想把它形象化…那么你可以根据你的需要来形象化它

编码以获取索引:

df.query('Sell.notna() | Buy.notna()').index

输出:

Index(['2020-05-21', '2020-05-22'], dtype='object', name='Date')

代码 获得过滤df

df.query('Sell.notna() | Buy.notna()')

输出

              Close      Upper       SMA       Lower       Buy  Sell
Date                        
2020-05-21  231.389999  219.042175  207.178002  195.313829  NaN 231.389999
2020-05-22  234.910004  222.051354  209.420002  196.788650  NaN 234.910004

相关问题 更多 >