在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}