如何基于用户分组在Pandas中创建滞后变量列
按用户分组生成仇恨回复数的滞后列解决方案
要实现按用户分组的hateful_replies滞后1期计算,且首次记录填充0,你可以借助pandas的groupby结合shift方法,步骤如下:
1. 确保数据按用户和时间排序
首先必须保证同一用户的记录按月份顺序排列,否则shift会取到错误的历史值:
df = df.sort_values(['user_name', 'month'])
2. 分组生成滞后列并填充空值
按user_name分组后,对hateful_replies执行shift(1),再用fillna(0)将首次记录的空值替换为0:
df['hateful_replies-1'] = df.groupby('user_name')['hateful_replies'].shift(1).fillna(0)
效果示例
假设原始数据如下:
| user_name | month | hateful_replies |
|---|---|---|
| Alice | 1 | 5 |
| Alice | 2 | 3 |
| Bob | 1 | 2 |
| Charlie | 1 | 0 |
| Charlie | 2 | 4 |
| Charlie | 3 | 1 |
处理后输出:
| user_name | month | hateful_replies | hateful_replies-1 |
|---|---|---|---|
| Alice | 1 | 5 | 0 |
| Alice | 2 | 3 | 5 |
| Bob | 1 | 2 | 0 |
| Charlie | 1 | 0 | 0 |
| Charlie | 2 | 4 | 0 |
| Charlie | 3 | 1 | 4 |
内容的提问来源于stack exchange,提问作者Connor95
相关产品推荐
相关产品推荐

