如何在Pivot前对DataFrame的F值采样并保留M值,将选中列转为新列?
问题需求
原始DataFrame:
期望结果DataFrame:
需求说明:原始DataFrame中性为F的feed记录行数多于M,需要在执行Pivot操作前,对F对应的行进行采样,使其行数与M的原始行数一致,同时完整保留M的所有数据。
解决代码
使用Pandas分组采样即可实现需求,代码示例如下:
import pandas as pd # 假设原始数据存储在df中 # 统计性别为M的记录数 m_row_count = df[df['性别'] == 'M'].shape[0] # 分组处理:保留M的全部数据,对F采样至与M相同的行数 sampled_data = df.groupby('性别', group_keys=False).apply( lambda group: group if group.name == 'M' else group.sample(n=m_row_count, random_state=42) ) # 执行Pivot操作生成目标结果 result_df = sampled_data.pivot(index='user_id', columns='性别', values='feed').reset_index()
补充说明
random_state=42用于固定采样结果,保证可复现,不需要的话可以删除该参数- 如果
F的原始行数少于M,会触发报错,这种场景可以根据需求添加replace=True参数允许重复采样,但实际业务中这种情况较少见
内容的提问来源于stack exchange,提问作者Mimikyu o_0
相关产品推荐
相关产品推荐

