如何在Pandas的groupby操作中合并DataFrame列中的字典
在Pandas GroupBy操作中合并分组内的字典列
假设我们有一个Pandas DataFrame df,其中mydict列存储字典数据:
mystring mydict 0 a {'key1': 'value1'} 1 a {'key2': 'value2'} 2 b {'key2': 'value2'}
我希望通过groupby操作合并每组内的字典,比如用类似df.groupby('mystring')['mydict'].apply(lambda x: merge_dictionaries(x))的方式。针对mystring为'a'的分组,预期输出是{'key1': 'value1', 'key2': 'value2'}。
我知道合并字典通常可以用dict1.update(dict2)方法,但不确定怎么在这个场景下实现。
创建示例DataFrame的代码
旧版本(使用append,仅适用于Pandas 2.0.1之前版本)
mycolumns = ['mystring', 'mydict'] df = pd.DataFrame(columns = mycolumns) df = df.append(pd.DataFrame(['a', {'key1':'value1'}],mycolumns).T) df = df.append(pd.DataFrame(['a', {'key2':'value2'}],mycolumns).T) df = df.append(pd.DataFrame(['b', {'key3':'value3'}],mycolumns).T) df = df.reset_index(drop=True)
新版本(使用concat,兼容Pandas 2.0.1及以上版本)
mycolumns = ['mystring', 'mydict'] df = pd.DataFrame(columns = mycolumns) df = pd.concat([df, pd.DataFrame(['a', {'key1':'value1'}],mycolumns).T]) df = pd.concat([df, pd.DataFrame(['a', {'key2':'value2'}],mycolumns).T]) df = pd.concat([df, pd.DataFrame(['b', {'key3':'value3'}],mycolumns).T]) df = df.reset_index(drop=True)
不使用GroupBy的替代实现方式
遍历mystring的唯一值,逐个更新字典:
merged_dict = {} for mystring in df.mystring.unique(): for mydict in df[df.mystring==mystring]['mydict']: print(mydict) merged_dict.update(mydict)
内容的提问来源于stack exchange,提问作者Sheldon
相关产品推荐
相关产品推荐

