如何在PySpark/Pandas中以Year列为依据修改列值并按ID聚合
实现方法
以下是用Pandas完成需求的具体步骤:
- 为每行对应年份的m列赋值1
利用year列的值拼接出目标列名,直接定位赋值:
import pandas as pd # 构造示例DataFrame data = { 'a': ['hello']*4, 'id': [1,1,2,2], 'year': [2001,2015,2002,2015], 'm2000': [0]*4, 'm2001': [0]*4, 'm2002': [0]*4, 'm2015': [0]*4 } df = pd.DataFrame(data) # 核心:根据year列匹配对应mYYYY列并设为1 df.loc[df.index, 'm' + df['year'].astype(str)] = 1
- 按id分组聚合
对分组后的m开头列取最大值(只要该id下有过1,结果就保留1),a列取任意相同值即可:
# 分组聚合,重置索引恢复结构 result = df.groupby(['id', 'a']).max().reset_index() # 调整列顺序(可选,和示例输出一致) result = result[['a', 'id'] + [col for col in df.columns if col.startswith('m')]]
运行后得到的result就是你需要的最终结果。
内容的提问来源于stack exchange,提问作者lunbox
相关产品推荐
相关产品推荐

