gpt4 book ai didi

python - Pandas :日期/值的数据帧 -> "biggest value so far"的数据帧?

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:57 26 4
gpt4 key购买 nike

我有一个包含日期和值的 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)。

最佳答案

使用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

关于python - Pandas :日期/值的数据帧 -> "biggest value so far"的数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45378789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com