通过

时间:2021-06-18 13:53:06

标签: python pandas

我有一个数据帧

                date     close
        0  1997-10-22    8.4273
        1  1998-02-09    5.4130
        2  1998-04-30    5.4130
        1  1998-02-20    4.4130
        2  1998-04-30    3.4130
        3  1999-07-09    9.8670
        4  2000-02-25   11.4410
        5  2001-01-29    8.7326

我想在 DateTime 列中分组年份但保留 close 的相等值 喜欢

            date     close
        0  1997-10-22    8.4273
        1  1998-02-09    5.4130
        2  1998-04-30    5.4130
        3  1999-07-09    9.8670
        4  2000-02-25   11.4410
        5  2001-01-29    8.7326

我试过这个:

x = df.loc[df.groupby(df.date.dt.year)["close"].idxmax()].reset_index(drop = True)

但它的输出是

            date     close
        0  1997-10-22    8.4273
        1  1998-02-09    5.4130
        2  1999-07-09    9.8670
        3  2000-02-25   11.4410
        4  2001-01-29    8.7326

我能做什么?

1 个答案:

答案 0 :(得分:1)

这是您的 DataFrame:

import pandas as pd 
import datetime as dt 

df = pd.DataFrame(
    [
        (dt.datetime(1997, 10, 22), 8.4273),
        (dt.datetime(1998, 2, 9), 5.4130), 
        (dt.datetime(1998, 4, 30), 5.4130),
        (dt.datetime(1998, 2, 20), 4.4130),
        (dt.datetime(1998, 4, 30), 3.4130), 
        (dt.datetime(1999, 7, 9), 9.8670),
        (dt.datetime(2000, 2, 25), 11.4410), 
        (dt.datetime(2001, 1, 29), 8.7326), 
    ], 
    columns=['date', 'close']
)

您需要做的就是:

df = df[df.groupby(df.date.dt.year)['close'].transform('max') == df['close']]

结果是

print(df)
        date    close
0 1997-10-22   8.4273
1 1998-02-09   5.4130
2 1998-04-30   5.4130
5 1999-07-09   9.8670
6 2000-02-25  11.4410
7 2001-01-29   8.7326
相关问题