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 列中的值进行比较,以确定应保留哪些行
我在 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 列中的值进行比较,以确定应保留哪些行