Python DataFrame-查找值可用的最早日期
我有一个包含2个时间序列的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
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