我有一个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
答案 0 :(得分:1)
last
在pandas
中的工作方式是这样,它将返回group的last
notnull
值,如果要获取最后一个值(包括nan,请检查与iloc
和apply
一起使用)
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