【问题标题】:finding previous group's name in pandas dataframe在熊猫数据框中查找上一个组的名称
【发布时间】:2022-01-17 22:43:24
【问题描述】:

我想在我的数据框中添加一列(具有重复值),其中包含前一个组的名称(浮动和可排序)。有什么想法吗?

之前:

Group value
1.1 value1
1.1 value2
1.1 value3
1.1 value3
1.2 value4
1.2 value4
1.2 value5

之后:

Group value Previous Group
1.1 value1 Nan
1.1 value2 value1
1.1 value3 value2
1.1 value3 value2
1.2 value4 Nan
1.2 value4 Nan
1.2 value5 Value4

【问题讨论】:

    标签: python pandas dataframe group-by


    【解决方案1】:

    您可以将groupbyshift 一起使用,这会改变每个组的第1 组位置:

    df['Previous Group'] = df.groupby("value")['Group'].shift()
    

    print(df)
    
       Group   value  Previous Group
    0    1.1  value1             NaN
    1    1.1  value2             NaN
    2    1.2  value1             1.1
    3    1.2  value2             1.1
    

    编辑:

    我们可以使用 groupby ngroup 的辅助列,然后将其用作映射列并过滤掉 rank = 1:

    a = df.assign(helper=df.groupby(["Group","value"]).ngroup())
    rnk = a.groupby("Group")['helper'].rank(method='dense')
    df['Previous Group'] = (a['helper'].sub(1).map(dict(zip(a['helper'],a['value'])))
                             .mask(rnk.eq(1)))
    

    print(df)
    
       Group   value Previous Group
    0    1.1  value1            NaN
    1    1.1  value2         value1
    2    1.1  value3         value2
    3    1.1  value3         value2
    4    1.2  value4            NaN
    5    1.2  value4            NaN
    6    1.2  value5         value4
    

    【讨论】:

    • 感谢@anky 的回答。我在其他地方看到过这个答案,但这种方法的问题是它基于索引并且每组重复的值数量不起作用。让我编辑我的示例,以便您看到它。
    • @AmirGhorbani 答案现已更新以解决您的用例
    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 2017-09-25
    • 2019-01-26
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多