在Python中将数据帧转换为命令式

在Python中将数据帧转换为命令式,python,python-3.x,dictionary,jupyter-notebook,Python,Python 3.x,Dictionary,Jupyter Notebook,我有一个带有需求值的.csv文件​​下面是这样写的,我需要将其转换成字典,以便在数学优化器中使用 数据帧值​​像这样: mesoregion service value 0 Metropolitana_SP_ BAU 10000 1 Metropolitana_SP_ VIP / Retention 3000 2 Guarulhos BAU 5000 3 Guarulhos VIP / Retention 1000 {('Metropolitana_de_SP', 'BAU'): [1

我有一个带有需求值的
.csv
文件​​下面是这样写的,我需要将其转换成字典,以便在数学优化器中使用

数据帧值​​像这样:

mesoregion service value 
0 Metropolitana_SP_ BAU 10000 
1 Metropolitana_SP_ VIP / Retention 3000 
2 Guarulhos BAU 5000 
3 Guarulhos VIP / Retention 1000
{('Metropolitana_de_SP', 'BAU'): [10000], ('Metropolitana_de_SP', 'VIP / Retencao'): [3000], ('Guarulhos', 'BAU'): [5000], ('Guarulhos', 'VIP / Retention'): [1000]}
使用此命令可以转换为字典的原因:

demand=demand.set_索引(['mesoreion','service'])。T.to_dict(“列表”)
看起来是这样的:

mesoregion service value 
0 Metropolitana_SP_ BAU 10000 
1 Metropolitana_SP_ VIP / Retention 3000 
2 Guarulhos BAU 5000 
3 Guarulhos VIP / Retention 1000
{('Metropolitana_de_SP', 'BAU'): [10000], ('Metropolitana_de_SP', 'VIP / Retencao'): [3000], ('Guarulhos', 'BAU'): [5000], ('Guarulhos', 'VIP / Retention'): [1000]}
但是,我需要它看起来像这样(不是作为列表,而是作为该元组的值):

有人知道如何帮助吗


非常感谢

这将是我的解决方案:

# create example dataframe    
demand = pd.DataFrame([["Metropolitana_de_SP", "BAU", 10000],
                       ["Metropolitana_de_SP", "VIP / Retencao", 3000]], columns=["mesoregion", "service", "num"])
然后:将列转换为列表并保存到新列。在此之后,将列表转换为元组对象

demand["values_as_list"] = demand[["mesoregion", "service"]].values.tolist()
demand["values_as_tuple"] = demand["values_as_list"].apply(lambda x: tuple(x))
最后创建dict:

demand_dict = demand.set_index(['num'])["values_as_tuple"].to_dict()
print(demand_dict)
# {10000: ('Metropolitana_de_SP', 'BAU'), 3000: ('Metropolitana_de_SP', 'VIP / Retencao')}

非常感谢MarkusOdenthal,你是个专家。成功了

我刚刚改变了这个: demand\u dict=demand.set\u index(['num'])[“values\u as\u tuple”]。设置为\u dict()

为此: demand\u dict=demand.set\u index([“values\u as\u tuple]”)将[num']设置为\u dict()

为了得到我想要的

{('Metropolitana_de_SP','BAU'):10000,('Metropolitana_de_SP','VIP/Retencao'):3000,('Guarulhos','BAU'):5000,('Guarulhos','VIP/Retencao'):1000}