【发布时间】:2022-01-13 12:37:47
【问题描述】:
我有这个数据框:
COL0 COL1 COL2 COL3
----------------------------
A A1 A11 A111
A A1 A11 A112
A A1 A12 A113
A A1 A12 A114
A A2 A13 A115
A A2 A13 A116
A A2 A14 A117
A A2 A14 A118
我想从中获得一个像下面这样的字典。如果我只是将 to_dict() 方法应用于原始数据帧,则格式不是我想要的。
{
'A':{
'A1':{
'A11':['A111', 'A112'],
'A12':['A113', 'A114']
},
'A2':{
'A13':['A115', 'A116'],
'A13':['A117', 'A118']
}
}
}
PS:sn -p 生成上面的dataframe:
df = pd.DataFrame(
{
'COL0': ['A']*8,
'COL1': ['A1']*4 + ['A2']*4,
'COL2': ['A11']*2 + ['A12']*2 + ['A12']*2 + ['A13']*2,
'COL3': [f'A11{i+1}' for i in range(8)]
})
编辑:
TypeError Traceback(最近调用 最后)在 1 {a: {k: f.groupby('COL2')['COL3'].apply(list).to_dict() 2 for k, f in g.groupby('COL1')} ----> 3 for a, g in df.groupby('COL0')}
在 (.0) 1 {a: {k: f.groupby('COL2')['COL3'].apply(list).to_dict() 2 for k, f in g.groupby('COL1')} ----> 3 for a, g in df.groupby('COL0')}
在 (.0) 1 {a: {k: f.groupby('COL2')['COL3'].apply(list).to_dict() ----> 2 for k, f in g.groupby('COL1')} 3 for a, g in df.groupby('COL0')}
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\generic.py 在应用(自我,函数,*args,**kwargs) 219) 220 def 应用(自我,函数,*args,**kwargs): --> 221 返回 super().apply(func, *args, **kwargs) 222 223 @doc(_agg_template,示例=_agg_examples_doc,klass =“系列”)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\groupby.py 在应用(自我,函数,*args,**kwargs) 第865章 866 --> 867 函数 = self._is_builtin_func(func) 868 869 # 这是必需的,所以我们不会尝试包装字符串。如果我们可以
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\base.py 在 _is_builtin_func(self, arg) 342 否则返回 arg 第343章 --> 344 返回 self._builtin_table.get(arg, arg) 345 346
TypeError: unhashable type: 'list'
EDIT2:
TypeError Traceback(最近调用 最后)在 1 出 = {} ----> 2 键,v in df.groupby(list(df.columns[:-1]))[df.columns[-1]]: 3 d = out # 从根目录重启 4 val = v.to_list() 5 代表 k 键:
TypeError: 'list' 对象不可调用
【问题讨论】:
标签: python pandas dataframe dictionary