在熊猫数据框中查找上一个组的名称
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】:您可以将groupby
与shift
一起使用,这会改变每个组的第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 答案现已更新以解决您的用例以上是关于在熊猫数据框中查找上一个组的名称的主要内容,如果未能解决你的问题,请参考以下文章