【问题标题】:Pandas: filter the row according to the value of another column in different group (two columns in aggregate)Pandas:根据不同组中另一列的值过滤行(聚合两列)
【发布时间】:2021-11-11 14:29:12
【问题描述】:

我在 pandas 数据框中有如下数据集:

Name    Shift   Data Type
Peter   0       12    A   
Peter   0       13    A
Peter   0       14    B
Sam     1       12    A
Sam     1       15    A
Sam     1       16    B
Sam     1       17    B
Mary    2       20    A
Mary    2       21    A
Mary    2       12    A

有人可以建议如何显示如下所示的最终结果吗? (逻辑是:如果 shift 为 0,则在 groupby“Name”和“type”列下选择第 1 项;如果 shift 为 1,则在 groupby“Name”和“type”列下选择第二个值,等等......我已经考虑过 nth(x) 但在这种情况下我不知道如何在 x 上放置一个变量。其他解决方法很好,可以产生相同的结果。谢谢。

Name    Shift   Data   Type
Peter   0       12     A
Peter   0       14     B
Sam     1       15     A
Sam     1       17     B
Mary    2       12     A

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您可以使用groupby.cumcount()

    假设您的数据位于名为 df 的 DataFrame 中,我认为这应该适合您:

    df = df[df.groupby(['Name','Type']).cumcount()==df['Shift']]
    

    它将具有相同名称和类型的行的累积计数与 Shift 列中的值进行比较,以确定应保留哪些行

    【讨论】:

    • 非常感谢!完美运行!
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2016-05-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多