Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧转换为字典_Python_Pandas_Dictionary_Dataframe - Fatal编程技术网

Python 将数据帧转换为字典

Python 将数据帧转换为字典,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我有一个熊猫日期框: +-----------+-------+---------+ | kpi_name | coeff | measure | +-----------+-------+---------+ | messi | 2 | DoD | | ronaldo | 1.5 | MTD | | del_piero | 2 | MTD | +-----------+-------+---------+ 我需要将其转换为字典,如:

我有一个熊猫日期框:

+-----------+-------+---------+
| kpi_name  | coeff | measure |
+-----------+-------+---------+
| messi     | 2     | DoD     |
| ronaldo   | 1.5   | MTD     |
| del_piero | 2     | MTD     |
+-----------+-------+---------+
我需要将其转换为字典,如:

{'MTD':[{'KPI':'ronaldo', 'measure':'1.5'}, {'KPI:':'messi', 'measure':'2'],
 'DoD':['KPI':'messi', 'measure':'1.4']}
我正在努力:

a = df.groupby('measure').apply(lambda x: x.to_dict('list')).to_dict() 
我的输出:

{'MTD': {'kpi_name': ['ronaldo', 'del_piero'], 'coeff': [1.5, 2.0], 'measure': ['MTD', 'MTD']}, 'DoD': {'kpi_name': ['messi'], 'coeff': [2.0], 'measure': ['DoD']}}
谢谢你的帮助

请查看和
T
以备将来参考

给定一个数据帧

df = pd.DataFrame({'KPI':['messi', 'ronaldo', 'del_piero'],\
                   'coeff':[2, 1.5, 2], \
                   'measure':['DoD', 'MTD', 'MTD']})
您可以使用以下lambda函数

df.groupby('measure').apply(lambda x: list(x[['KPI','coeff']].T.to_dict().values())).to_dict()
以实现您的预期输出

{'DoD': [{'KPI': 'messi', 'coeff': 2.0}],
 'MTD': [{'KPI': 'ronaldo', 'coeff': 1.5}, {'KPI': 'del_piero', 'coeff': 2.0}]}

通过
GroupBy
使用词典理解:

df = pd.DataFrame({'kpi_name': ['messi', 'ronaldo', 'del_piero'],
                   'coeff': [2, 1.5, 2],
                   'measure': ['DoD', 'MTD', 'MTD']})

res = {k: grp.to_dict(orient='records') for k, grp in df.groupby('measure')}

print(res)

{'DoD': [{'kpi_name': 'messi', 'coeff': 2.0, 'measure': 'DoD'}],
 'MTD': [{'kpi_name': 'ronaldo', 'coeff': 1.5, 'measure': 'MTD'},
         {'kpi_name': 'del_piero', 'coeff': 2.0, 'measure': 'MTD'}]}

请解释更多你想要的输出。MTD与梅西在不同的位置有什么关系。1.4从何而来?@冻糕对我来说很重要,它通过测量X来探索解决方案!有一个小问题,为什么我们使用双括号x['KPI','coeff']]这个解决方案由于应用开销而效率低下。