pandas:日期/值的DataFrame - > DataFrame"迄今为止最大的价值"?

时间:2017-07-28 16:56:41

标签: python pandas

我有一个日期和值的DataFrame(在下面的代码中,我可能没有正确解析日期)。

import pandas as pd
d = {'date': pd.Series(['2010-01-01', '2011-01-01',
                        '2012-01-01', '2012-07-01',
                        '2013-01-01']),
     'value': pd.Series([0, 2, 1, 4, 3])}
df = pd.DataFrame(d)

我想要一个可以过滤这个DataFrame的函数,只给我一些"到目前为止我看到的最大值" (关于日期)。在这种情况下,我最终会得到3行(当前行0,1和3,值为0,2和4)。

1 个答案:

答案 0 :(得分:2)

在“值”列上使用cummax获取累计最大值,然后将“值”列的累计最大值与“值”列本身进行比较,并仅将行保留在“值”列中等于其累积最大值:

df[df['value'].cummax() == df['value']]

请注意,上述方法将包含重复的最大值。例如,如果有一个值为4的附加行,则输出中将包含4个行。

如果您不想复制,可以采用与cummax类似的方法,但只保留cummax更改的行。为此,在累积最大值上使用diff以获得与先前值的差异,并保持差异为正的位置。添加带有正值的fillna以保留第一行:

df[df['value'].cummax().diff().fillna(1) > 0]

删除重复项的一种稍微简单的方法是使用drop_duplicates后面的第一种方法,但根据您的数据,这可能不符合要求:

df[df['value'].cummax() == df['value']].drop_duplicates(subset='value')

使用任何方法得到的样本数据输出:

         date  value
0  2010-01-01      0
1  2011-01-01      2
3  2012-07-01      4