鉴于此设置:
import pandas as pd
import numpy as np
import io
content = io.BytesIO("""\
IDs timestamp value
0 2010-10-30 1
0 2010-11-30 2
1 2000-01-01 300
1 2007-01-01 33
1 2010-01-01 400
2 2000-01-01 11""")
df = pd.read_table(content, header=0, sep='\s+', parse_dates=[1])
df.set_index(['IDs', 'timestamp'], inplace=True)
使用reset_index后跟groupby
df.reset_index(['timestamp'], inplace=True)
print(df.groupby(level=0).last())
产量
timestamp value
IDs
0 2010-11-30 00:00:00 2
1 2010-01-01 00:00:00 400
2 2000-01-01 00:00:00 11
但是,这并不是最好的解决方案.应该有一种方法可以不调用reset_index …
正如您在注释中指出的那样,last会忽略NaN值.要不跳过NaN值,可以这样使用groupby / agg:
df.reset_index(['timestamp'], inplace=True)
grouped = df.groupby(level=0)
print(grouped.agg(lambda x: x.iloc[-1]))