【问题标题】:Pandas Function similar to SQL rank and partition [duplicate]Pandas 函数类似于 SQL rank 和 partition [重复]
【发布时间】:2020-01-21 13:16:13
【问题描述】:

我有以下数据

ID        DD         DAYS   VALUE
 1     08-MAR-19      4      500
 1     09-MAR-19      1      1500
 2     13-MAR-19      0       0

我想选择 ID 1 的最大天数,它只会返回 4 的行。 在 SQL 中,我使用以下查询

select aa.*, rank() over (partition by ID order by DAYS desc) rank_n;

只返回

 ID        DD         DAYS   VALUE 
    1     08-MAR-19      4       500
    2     13-MAR-19      0       0

我怎样才能在熊猫中做同样的事情

【问题讨论】:

    标签: python sql pandas oracle


    【解决方案1】:

    这是另一个使用 loc 的选项,它用于 pandas 中的旧 select 函数。

    import pandas as pd
    data = {'id':[1,1,4],'DD':['08-MAR-19','09-MAR-19','13-MAR-19'],'DAYS':[4,1,0],'VALUE':[500,1500,0]}
    df = pd.DataFrame(data)
    
    df = df.loc[(df['id'] == 1) & (df['DAYS'] == max(df['DAYS']))]
    print(df)
    

    输出:

       id         DD  DAYS  VALUE
    0   1  08-MAR-19     4    500
    

    【讨论】:

    • 数据有很多 ID,这只是一个样本,因此我无法使用 df['id'] == 1 进行过滤
    • 那么你应该使用 groupby 并保留索引值。但是如果你想按id 分区,为什么id 2 没有出现?
    • 抱歉应该显示,我已经修改了问题
    猜你喜欢
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2020-08-01
    相关资源
    最近更新 更多