python pandas dataframe resample.last如何确保数据来自同一行

时间:2019-04-29 03:16:09

标签: python pandas dataframe

我有一个dataframe像这样,

df = pd.DataFrame({'col1':range(9), 'col2': list(range(6)) + [np.nan] *3}, 
    index = pd.date_range('1/1/2000', periods=9, freq='T'))

df
Out[63]: 
                     col1  col2
2000-01-01 00:00:00     0   0.0
2000-01-01 00:01:00     1   1.0
2000-01-01 00:02:00     2   2.0
2000-01-01 00:03:00     3   3.0
2000-01-01 00:04:00     4   4.0
2000-01-01 00:05:00     5   5.0
2000-01-01 00:06:00     6   NaN
2000-01-01 00:07:00     7   NaN
2000-01-01 00:08:00     8   NaN

并且当我通过方法resample执行last时,

df.resample('3T', label='right', closed='right').last()
Out[60]: 
                     col1  col2
2000-01-01 00:00:00     0   0.0
2000-01-01 00:03:00     3   3.0
2000-01-01 00:06:00     6   5.0
2000-01-01 00:09:00     8   NaN

从上方可以看到,6th minute行的数据在col1上,因此在重新采样后,col1的数据已填充在6th minute行上,但是{{1 }}充满了col2行,有一种方法可以确保重采样后的两个数据都来自5th minute行,这意味着如果6th minute有数据,则重采样将不会填充{ {1}}的{​​{1}}和last,但是可以保留原样吗?

col1

2 个答案:

答案 0 :(得分:1)

lastpandas中的工作方式是这样,它将返回group的last notnull值,如果要获取最后一个值(包括nan,请检查与ilocapply一起使用)

df.resample('3T', label='right', closed='right').apply(lambda x : x.iloc[-1])
Out[103]: 
                     col1  col2
2000-01-01 00:00:00     0   0.0
2000-01-01 00:03:00     3   3.0
2000-01-01 00:06:00     6   NaN
2000-01-01 00:09:00     8   NaN

答案 1 :(得分:0)

使用.nth(-1)的{​​{1}}或.tail(1)也可以形成相同的组:

ceil