Python DataFrame-查找值可用的最早日期

Python DataFrame-查找值可用的最早日期,python,pandas,dataframe,time-series,series,Python,Pandas,Dataframe,Time Series,Series,我有一个包含2个时间序列的pandas.DataFrame对象。一个系列比另一个短得多 我想确定最短系列中数据可用的较远日期,并删除该日期之前2列中的数据 做这件事最像蟒蛇的方式是什么 (很抱歉,我没有真正遵守SO提交问题的指导原则) 以下是我的数据帧的一个片段: osr go Date 1990-08-17 NaN 239.75 1990-08-20 NaN 251.50 1990-08-21 352.00 265.0

我有一个包含2个时间序列的
pandas.DataFrame
对象。一个系列比另一个短得多

我想确定最短系列中数据可用的较远日期,并删除该日期之前2列中的数据

做这件事最像蟒蛇的方式是什么

(很抱歉,我没有真正遵守SO提交问题的指导原则)

以下是我的数据帧的一个片段:

            osr       go
Date        
1990-08-17  NaN     239.75
1990-08-20  NaN     251.50
1990-08-21  352.00  265.00
1990-08-22  353.25  274.25
1990-08-23  351.75  290.25

在这种情况下,我想去掉1990-08-21之前的所有行(我添加了最近日期的某列中可能有NAs)

编辑:基于评论/编辑的新答案

听起来数据是连续的,一旦你有了没有数据的行,你就想把它们扔掉。这可以很容易地用

这个答案假设一旦你通过了坏行,它们就会保持良好状态。或者,如果你不关心在中间抛出行…取决于你需要的顺序。如果数据需要顺序,并且您的输入是格式良好的jezrael,那么答案是好的

原始答案

您在这里没有给出太多关于数据帧结构的信息,所以我将在这里进行假设。我假设您有很多列,其中两列:
time\u series\u 1
time\u series\u 2
是您在问题中提到的,这些都存储在
df

首先,我们可以通过使用

shorter_col = df['time_series_1'] if len(df['time_series_1']) > len(df['time_series_2']) else df['time_series_2']
现在我们要最后一次约会

remove_date = max(shorter_col)
现在,我们希望在该日期之前删除数据

mask = (df['time_series_1'] > remove_date) | (df['time_series_2'] > remove_date)
df = df[mask]
您可以通过
df['osr'][::-1]
在倒置的
s
中使用,然后使用
df
的子集:

print df
#               osr      go
#Date                      
#1990-08-17     NaN  239.75
#1990-08-20     NaN  251.50
#1990-08-21  352.00  265.00
#1990-08-22  353.25  274.25
#1990-08-23  351.75  290.25

s = df['osr'][::-1]
print s
#Date
#1990-08-23    351.75
#1990-08-22    353.25
#1990-08-21    352.00
#1990-08-20       NaN
#1990-08-17       NaN
#Name: osr, dtype: float64

maxnull = s.isnull().idxmax()
print maxnull
#1990-08-20 00:00:00

print df[df.index > maxnull]
#               osr      go
#Date                      
#1990-08-21  352.00  265.00
#1990-08-22  353.25  274.25
#1990-08-23  351.75  290.25

@edouard在您的编辑中看起来只有一个时间序列,您有两个不同的数据帧吗?每个按时间索引?有两列“osr”和“go”与同一时间对齐index@edouard现在我想我明白你的问题了,答案已经更新了
print df
#               osr      go
#Date                      
#1990-08-17     NaN  239.75
#1990-08-20     NaN  251.50
#1990-08-21  352.00  265.00
#1990-08-22  353.25  274.25
#1990-08-23  351.75  290.25

s = df['osr'][::-1]
print s
#Date
#1990-08-23    351.75
#1990-08-22    353.25
#1990-08-21    352.00
#1990-08-20       NaN
#1990-08-17       NaN
#Name: osr, dtype: float64

maxnull = s.isnull().idxmax()
print maxnull
#1990-08-20 00:00:00

print df[df.index > maxnull]
#               osr      go
#Date                      
#1990-08-21  352.00  265.00
#1990-08-22  353.25  274.25
#1990-08-23  351.75  290.25