在熊猫数据框中查找上一个组的名称

Posted

技术标签:

【中文标题】在熊猫数据框中查找上一个组的名称【英文标题】: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

【问题讨论】:

【参考方案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 答案现已更新以解决您的用例

以上是关于在熊猫数据框中查找上一个组的名称的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框中选择排序组的第一行

根据索引在熊猫数据框中查找特定列的值[重复]

如何计算熊猫数据框中组的每对行之间的函数

如何计算熊猫数据框中每组的行数并将其添加到原始数据中

在熊猫数据框中查找重复行

如何查找在熊猫数据框中出现最多的行项目