Pandas:根据不同组中另一列的值过滤行(两列合计)

Pandas: filter the row according to the value of another column in different group (two columns in aggregate)

我在 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 的“名称”和“类型”列下选择第一个项目;如果 shift 为 1,则在 groupby 的“名称”和“类型”列下选择第二个值,等等......我想到了 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

您可以使用groupby.cumcount()

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

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

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