使用pandas groupby提取列唯一组合并构建按颜色分类的新DataFrame
解决方法
首先先修正你提供的示例DataFrame的小问题:原数据中Colors列只有9个值,其余列均为10个值,直接运行会报错,我先补全数据后给出实现代码。
方法1:直接拼接后分组转换
这是最简便的实现方式,步骤如下:
import pandas as pd # 补全后的示例DataFrame df = pd.DataFrame({ 'Colors': ['blue', 'blue', 'orange', 'red', 'purple', 'orange', 'purple', 'blue', 'brown', 'red'], 'Price': ['500', '500', '200', '250', '300', '765', '1100', '762', '650', '625'], 'Style': ['farm', 'contemporary', 'modern', 'MDM', 'MDM', 'contemporary', 'farm', 'contemporary', 'farm', 'MDM'], 'Location': ['far', 'near', 'far', 'far', 'near', 'far', 'far', 'near', 'far', 'near'] }) # 生成拼接后的组合字符串 df['comb'] = df['Price'] + '_' + df['Style'] + '_' + df['Location'] # 按颜色分组取唯一组合,转换为目标格式DataFrame result = df.groupby('Colors')['comb'].unique().apply(pd.Series).T # 可选:将列名首字母大写匹配你的要求 result.columns = result.columns.str.capitalize()
输出的result就符合你的要求,不同颜色的组合数不一致时,空缺位置会自动填充NaN。
方法2:基于你已有的groupby size结果转换
如果你已经生成了df.groupby(['Colors', 'Price', 'Style', 'Location']).size()的结果,可以用以下代码转换:
# 你已有的分组计数结果 grouped_series = df.groupby(['Colors', 'Price', 'Style', 'Location']).size() # 重置索引后拼接字段 temp_df = grouped_series.reset_index() temp_df['comb'] = temp_df['Price'] + '_' + temp_df['Style'] + '_' + temp_df['Location'] # 转换为目标格式 result = temp_df.groupby('Colors')['comb'].apply(pd.Series).unstack(level=0) result.columns = result.columns.str.capitalize()
内容的提问来源于stack exchange,提问作者MAtennis9
相关产品推荐
相关产品推荐

