2017-05-17 10 views
0

I以下のデータフレームがあります。私は "塗りつぶしたい選択値

df2 = pd.DataFrame({ 'sites_lookup' : (5,10,15,20,25,30,35,40), 
       'supply_lookup' : (50,100,150,200,250,300,350,400)}) 

:私も別のシミュレーションから得られた値を持つ別のデータフレームを持っている

import pandas as pd  
df = pd.DataFrame({ 'A__area_ID' : np.arange(3), 
       'B_demand' : (150, 300, 250), 
       'C_sites' : (10, 20, 30), 
       'D_supply' : (100, 200, 300), 
       'E_margin' : (-50, -100, 50), 
       'F_new_sites' : ('', '', '')}) 

をF_new_sites '列に必要なセルタワーサイト(df2.sites_lookupから)を必要最小限にして、各領域の需要を満たすことができます(各行は特定の地域です)。

'E_margin'は容量マージン(需要量)ですので、容量が負の場合はセルサイトを追加します。

第2のデータフレーム(df2)は、設定された数のセルタワーサイト(sites_lookup)によってどのくらいの供給(supply_lookup)が提供されるかを示します。

私は次のように誤って試みた:

if df.E_margin < 0 : 
    df.F_new_sites [df2.supply_lookup >= df.demand] = df2.sites_lookup 
else = 0 

「E_new_sitesは」需要存在を満たすために必要なサイトの合計数を表し、私は、最後のデータフレームは次のようになりたい:

output = pd.DataFrame({ 'A__area_ID' : np.arange(3), 
        'B_demand' : (150, 300, 250), 
        'C_sites' : (10, 20, 30), 
        'D_supply' : (100, 200, 300), 
        'E_margin' : (-50, -100, 50), 
        'F_new_sites' : ('15', '30', '0')})  

需要と供給が均等に一致しない場合があるため、supply_lookupからのバケットが現在の需要を超える(このレベルを満たすために)必要があります。

+0

あなたは 'supply_lookup'カラムで' D_supply - E_margin'を探していますか? 'sites_lookup'の値を' df ['F_new_sites'] 'に渡しますか? –

+0

E_marginが負の場合は、B_demandとsupply_lookupの値を一致させ、F_new_sitesに正しいsites_lookup値を設定します。私はそれが意味をなさないことを願っています、Ed –

答えて

0

便宜のためにデータフレームの命名:

def lookup_new_sites(row): 
    if row['E_margin'] < 0: 
     # get the minimum number of sites that cover the current supply deficit 
     number_new = lookup_df.loc[lookup_df['supply_lookup'] >= abs(row['E_margin']), 'sites_lookup'].values[0] 
     return row['C_sites'] + number_new 
    else: 
     return 0 

そして、それを適用します:

sites_df['F_new_sites'] = sites_df.apply(lookup_new_sites, axis=1) 

を与える

sites_df = df = pd.DataFrame({ 'A__area_ID' : pd.np.arange(3), 
          'B_demand' : (150, 300, 250), 
          'C_sites' : (10, 20, 30), 
          'D_supply' : (100, 200, 300), 
          'E_margin' : (-50, -100, 50), 
          'F_new_sites' : ('', '', '')}) 
lookup_df = pd.DataFrame({ 'sites_lookup' : (5,10,15,20,25,30,35,40), 
          'supply_lookup' : (50,100,150,200,250,300,350,400)}) 

はのはapplyは、各データフレームの列にD」する機能を作ってみましょう:

A__area_ID B_demand C_sites D_supply E_margin F_new_sites 
0   0  150  10  100  -50   15 
1   1  300  20  200  -100   30 
2   2  250  30  300  50   0 
+0

ありがとう、図書館員! –