【问题标题】:Dictionary making for a transportation model from a Dataframe从 Dataframe 为运输模型制作字典
【发布时间】:2021-08-25 03:42:30
【问题描述】:

我有这个数据框来解决交通问题。

Unnamed: 0 Unnamed: 1    c1   c2   c3   c4   c5  capacity
0        NaN         p1   4    5    6    8   10     500.0
1        NaN         p2   6    4    3    5    8     500.0
2        NaN         p3   9    7    4    2    4     500.0
3     demand        NaN  80  270  250  160  180       NaN

我已经像这样更改了列名,

df.columns = ['Demand', 'Plant', 'c1', 'c2', 'c3', 'c4', 'c5', 'capacity']

我想做一本这样的字典,

 d = {c1:80, c2:270, c3:250, c4:160, c5:180}  # customer demand
 M = {p1:500, p2:500, p3:500}               # factory capacity
 I = [c1,c2,c3,c4,c5]                         # Customers
 J = [p1,p2,p3]                             # Factories
 cost = {(p1,c1):4,    (p1,c2):5,    (p1,c3):6,
 (p1,c4):8,    (p1,c5):10, ......
  } 

对于第一种情况,我使用了以下代码,

  M = df.set_index('Plant')['capacity'].to_dict()

它给了我,

  {'p1': 500.0, 'p2': 500.0, 'p3': 500.0, nan: nan}  

我不想要任何 NaN 值。请帮助以没有 NaN 的通用方式查找此总字典(d、M 和成本)。

【问题讨论】:

    标签: python pandas dataframe numpy dictionary


    【解决方案1】:
    df1 = df.set_index(["Unnamed: 0", "Unnamed: 1"])
    plants = df1.loc[np.NaN]  # remove demand from dataframe
    
    d = dict(df1.loc["demand"].T.squeeze().dropna().iteritems())
    M = dict(plants["capacity"].iteritems())
    I = list(plants.drop(columns="capacity").columns)
    J = list(plants.index)
    cost = dict(plants.drop(columns="capacity").stack().iteritems())
    
    >>> d
    {'c1': 80.0, 'c2': 270.0, 'c3': 250.0, 'c4': 160.0, 'c5': 180.0}
    
    >>> M
    {'p1': 500.0, 'p2': 500.0, 'p3': 500.0}
    
    >>> I
    ['c1', 'c2', 'c3', 'c4', 'c5']
    
    >>> J
    ['p1', 'p2', 'p3']
    
    >>> cost
    {('p1', 'c1'): 4,
     ('p1', 'c2'): 5,
     ('p1', 'c3'): 6,
     ('p1', 'c4'): 8,
     ('p1', 'c5'): 10,
     ('p2', 'c1'): 6,
     ('p2', 'c2'): 4,
     ('p2', 'c3'): 3,
     ('p2', 'c4'): 5,
     ('p2', 'c5'): 8,
     ('p3', 'c1'): 9,
     ('p3', 'c2'): 7,
     ('p3', 'c3'): 4,
     ('p3', 'c4'): 2,
     ('p3', 'c5'): 4}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-28
      • 2021-06-20
      • 2013-02-19
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2016-11-19
      相关资源
      最近更新 更多