python - 在分组的熊猫数据框中创建两个移位的列
问题描述
我已经查看了所有内容,但仍然找不到如何在其组内的 Pandas Dataframe 中创建两个移位列的示例。
我用一列完成了它,如下所示:
data_frame['previous_category'] = data_frame.groupby('id')['category'].shift()
但我必须用 2 列来完成,一列向上移动,另一列向下移动。
有任何想法吗?
解决方案
可以通过自定义函数使用GroupBy.apply
,因为一列需要向下移动,第二列需要向上移动:
df = pd.DataFrame({
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'F':list('aaabbb')
})
def f(x):
x['B'] = x['B'].shift()
x['C'] = x['C'].shift(-1)
return x
df = df.groupby('F').apply(f)
print (df)
B C F
0 NaN 8.0 a
1 4.0 9.0 a
2 5.0 NaN a
3 NaN 2.0 b
4 5.0 3.0 b
5 5.0 NaN b
如果想以相同的方式移动,只需指定列表中的所有列:
df[['B','C']] = df.groupby('F')['B','C'].shift()
print (df)
B C F
0 NaN NaN a
1 4.0 7.0 a
2 5.0 8.0 a
3 NaN NaN b
4 5.0 4.0 b
5 5.0 2.0 b
推荐阅读
- spring - REST springboot 服务(XML)中的 406 HTTP 响应
- sql - SQL 查询中日期的 Case When 语句
- azure-cosmosdb - 不同的查询在 Cosmos DB 中无法正常工作
- javascript - 在 React-Bootstrap 中有条件地禁用选项卡
- python - Selenium(python)显式等待超时错误
- spring-boot - 我们真的需要为 Spring Boot 管理客户端添加 Spring Boot Starter Web 吗?
- asp.net - Azure B2C 应用程序角色(图形 api)
- c - 如何从 Windows 命令行调试 eclipse c 项目?
- java - SpringBoot:如何使用响应式编程调用 API 链?
- php - AWS 凭证错误