如何获取panda中有条件的行的索引号



我有一个数据帧,在其中我需要与Date列进行比较,并需要获得索引号。

条件:-

  1. 如果日期==01-06-2018,则获取包含该日期的所有行的索引号。

  2. 否则将其与该数据帧中的日期进行比较,该日期正好在2018年6月1日之前,该日期为2017年12月1日。

那么现在我们如何使用第二个条件来获得包含2017年12月1日日期的所有行的索引号。

数据帧:-

SR.No     Date
1      01-12-2013
1      01-12-2014
1      01-12-2015
1      01-12-2016
1      01-12-2017 
1      01-12-2018
1      01-12-2019
1      01-12-2020 
1      01-12-2013
1      01-12-2014
1      01-12-2015
1      01-12-2016
1      01-12-2017 
1      01-12-2018
1      01-12-2019
1      01-12-2020 
2      01-12-2013
2      01-12-2014
2      01-12-2015
2      01-12-2016
2      01-12-2017
2      01-12-2018
2      01-12-2019 
2      01-12-2020 
2      01-12-2013
2      01-12-2014
2      01-12-2015
2      01-12-2016
2      01-12-2017
2      01-12-2018
2      01-12-2019 
2      01-12-2020

您可以创建一个自定义函数:

def getdate(date,df=df):
df=df.copy()
df['Date']=pd.to_datetime(df['Date'],dayfirst=True)
date=pd.to_datetime(date,dayfirst=True)
if df['Date'].eq(date).any():
return df[df['Date'].eq(date)].index
else:
date=(date-pd.DateOffset(months=6))
return df[df['Date'].eq(date)].index

最后:

out=getdate('01-06-2018')

out:的输出

Int64Index([4, 12, 20, 28], dtype='int64')

解释:

我们正在创建一个函数,该函数检查给定日期(当前为"01-06-2018"(是否等于df['Date']系列中的日期,并返回布尔系列,我们将该布尔系列传递到数据帧df中,并使用.index属性过滤结果和获取索引。如果数据帧中没有行,则会在if块和else块中发生这种情况对于我们在if块中检查的条件,我们正在进行减法运算,或者您也可以说将日期四舍五入到6个月前(通过使用pd.DateOffset()(,所以现在(您输入的日期(当前为"01-06-2018"(变为"01-12-2017"(因为我们在函数中使用to_datetime()方法,所以它变为"2017-12-01"(,所以我们正在检查您的数据帧,如果它存在,那么它会给你索引,否则它会给空的系列

函数内每一行的解释:

def getdate(date,df=df):
df=df.copy()
#creating the copy of the dataframe so that the changes made here doesn't reflect in your original dataframe
df['Date']=pd.to_datetime(df['Date'],dayfirst=True)
#converting the Date column to datetime dtype
date=pd.to_datetime(date,dayfirst=True)
#converting the date that you passed when calling the function '01-06-2018' to datetime
if df['Date'].eq(date).any():
#checking if '01-06-2018' is present in 'Date' column
return df[df['Date'].eq(date)].index
#Filtering out result and getting index
else:
#If '01-06-2018' is not present in 'Date' column then
date=(date-pd.DateOffset(months=6))
#Rounding/substracting the 6 months so now date become '2017-12-01'
return df[df['Date'].eq(date)].index
#Filtering out result and getting index

更新:

添加条件后,您的功能变为:

def getdate(date,df=df):
df=df.copy()
df['Date']=pd.to_datetime(df['Date'],dayfirst=True)
date=pd.to_datetime(date,dayfirst=True)
if df['Date'].eq(date).any():
return df[df['Date'].eq(date)].index
else:
to_check=pd.to_datetime(pd.Series(['01-03-18','01-06-2018','01-09-2018']),dayfirst=True)
if to_check.isin([date]).any():
date=pd.to_datetime('01-12-2017',dayfirst=True)
else:
date=(date-pd.DateOffset(months=6))
return df[df['Date'].eq(date)].index

相关内容

  • 没有找到相关文章