基于Pandas的DataFrame处理:按FID/TID规则生成目标列需求
问题描述
我有一个包含TID和FID列的DataFrame,数据示例如下:
输入DataFrame:
TID FID 1 1 2 3 4 5 4
需生成满足以下规则的Result列:
- 若
FID不为空,优先取FID的值;若FID为空,默认取TID的值。 - 若某组
TID中存在使用FID值的记录,该组所有TID对应的Result都要统一使用这个FID值。
预期结果示例:
输出DataFrame:
TID FID Result 1 2 1 2 2 3 3 4 5 5 4 5
解决方案
使用Pandas的分组转换功能可以快速实现需求,代码如下:
import pandas as pd # 构造示例数据(实际使用时替换为你的DataFrame) df = pd.DataFrame({ 'TID': [1, 1, 3, 4, 4], 'FID': [None, 2, None, 5, None] }) # 按TID分组,为每组生成统一的Result值 df['Result'] = df.groupby('TID')['FID'].transform( lambda group: group.dropna().iloc[0] if not group.dropna().empty else group.name ) print(df)
代码逻辑说明
groupby('TID'):将数据按TID分组,确保同组记录一起处理transform:把分组处理后的结果映射回原DataFrame的每一行,保证行数不变- 匿名函数:检查当前组是否有非空的
FID值,有则取该值;无则取当前组的TID值(group.name即分组的TID键值)
运行代码后即可得到符合要求的结果。
内容的提问来源于stack exchange,提问作者cyntha
相关产品推荐
相关产品推荐

