如何基于Pandas DataFrame分组合并列字符串生成指定格式字典?
Pandas DataFrame 转指定格式字典(支持多列作为键)
先构造示例数据
首先创建你提供的DataFrame,方便复现测试:
import pandas as pd data = { 'Column A': ['Apple', 'Apple', 'Banana', 'Banana'], 'Column B': ['red', 'red', 'yellow', 'yellow'], 'Column C': ['Texas', 'California', 'Indiana', 'Florida'] } df = pd.DataFrame(data)
两列作为键的实现
通过groupby分组,再将分组键拼接为字符串,值转为列表:
# 按Column A和Column B分组,聚合Column C为列表,得到元组键的字典 temp_dict = df.groupby(['Column A', 'Column B'])['Column C'].agg(list).to_dict() # 将元组键转为空格拼接的字符串 final_dict = {' '.join(key): value for key, value in temp_dict.items()}
执行后final_dict就是你需要的格式:{ "Apple red" : ['Texas', 'California'], "Banana yellow" : ['Indiana', 'Florida'] }
支持多列作为键的扩展
如果需要3列及以上作为键,只需修改groupby的列列表,再重复键拼接步骤即可。比如新增Column D列的示例:
# 构造多列示例数据 data_multi = { 'Column A': ['Apple', 'Apple', 'Banana', 'Banana', 'Apple'], 'Column B': ['red', 'red', 'yellow', 'yellow', 'green'], 'Column C': ['Texas', 'California', 'Indiana', 'Florida', 'Washington'], 'Column D': ['small', 'large', 'small', 'large', 'small'] } df_multi = pd.DataFrame(data_multi) # 按Column A、Column B、Column D三列分组 temp_multi_dict = df_multi.groupby(['Column A', 'Column B', 'Column D'])['Column C'].agg(list).to_dict() # 拼接多列键为字符串 final_multi_dict = {' '.join(key): value for key, value in temp_multi_dict.items()}
最终final_multi_dict的键会是"Apple red small"、"Apple red large"这类拼接后的字符串,对应的值是分组后的Column C列表。
另一种更直观的写法
你也可以先在DataFrame中生成拼接好的键列,再分组聚合:
# 两列键的情况 df['key'] = df['Column A'] + ' ' + df['Column B'] final_dict_alt = df.groupby('key')['Column C'].agg(list).to_dict() # 多列键的情况 df_multi['key'] = df_multi['Column A'] + ' ' + df_multi['Column B'] + ' ' + df_multi['Column D'] final_multi_dict_alt = df_multi.groupby('key')['Column C'].agg(list).to_dict()
这种写法逻辑更直白,适合快速理解。
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

