预测依据历史人物

我想根据历史数据预测分配。


用户提供的手动输入:


year    month     x          y          z          k

2018    JAN  9,267,581   627,129     254,110     14,980 

2018    FEB  7,771,691   738,041     217,027     17,363 

历史人物的输出:


year  month segment pg  is_p    x   y   z   k

2018    JAN A   p   Y   600 600 600 600

2018    JAN A   p   N   200 200 200 200

2018    JAN B   r   Y   400 400 400 400

2018    JAN A   r   Y   400 400 400 400

2018    JAN A   r   N   400 400 400 400

2018    JAN B   r   N   300 300 300 300

2018    JAN C   s   Y   200 200 200 200

2018    JAN C   s   N   10  10  10  10

2018    JAN C   t   Y   11  11  11  11

2018    JAN C   t   N   12  12  12  12

2018    FEB A   p   Y   789 789 789 789

2018    FEB A   p   N   2093874 2093874 2093874 2093874

我试过is_p从总数中计算分配,比如我添加了某些列来计算分配百分比:

  1. %ofx_segment= 600+200+400+400/600+200+400+400+400+300+200+10+11+12。这会给我多少 x 从段贡献 y,z,k 也是如此

  2. 我将手动输入的 9276581 * 乘以%ofx_segment计算 segment_x 的值

  3. 然后,我计算%_pg。对于 2018 年 1 月的 A 段,%_pg= 600+200/600+200+400+400

  4. 然后,我乘以从步骤 2 收到的手动输入 * %pg 从 3 收到的 'p' in pg for A 段

  5. 然后,最后,我将计算 is_p 的 %,我将计算 % Y 或 %N for p in pg for A in segment % Y is =600/600+200。

  6. 从步骤 5 收到的值必须乘以从 4 收到的输出。

import pandas as pd

first=pd.read_csv('/Users/arork/Downloads/first.csv')

second=pd.read_csv('/Users/arork/Downloads/second.csv')

interested_columns=['x','y','z','k']

second=pd.read_csv('/Users/arork/Downloads/second.csv')

interested_columns=['x','y','z','k']

primeallocation=first.groupby(['year','month','pg','segment'])[['is_p']+interested_columns].apply(f)

segmentallocation=first.groupby(['year','month'])[['segment']+interested_columns].apply(g)

pgallocation=first.groupby(['year','month','segment'])[['pg']+interested_columns].apply(h)

segmentallocation['%of allocation_segment x']

np.array(second)

func = lambda x: x * np.asarray(second['x'])

segmentallocation['%of allocation_segment x'].apply(func)


紫衣仙女
浏览 203回答 4
4回答

Qyouu

您需要加入这两个数据框以执行两列的乘法。merged_df = segmentallocation.merge(second,on=['year','month'],how='left',suffixes=['','_second'])for c in interested_columns:        merged_df['allocation'+str(c)] = merged_df['%of allocation'+str(c)] * merged_df[c] merged_df    year    month   segment x   y   z   k   %of allocationx %of allocationy %of allocationz %of allocationk x_second    y_second    z_second    k_second    allocationx allocationy allocationz allocationk0   2018    FEB A   2094663 2094663 2094663 2094663 1.000000    1.000000    1.000000    1.000000    7,771,691   738,041 217,027 17,363  2.094663e+06    2.094663e+06    2.094663e+06    2.094663e+061   2018    JAN A   1600    1600    1600    1600    0.631662    0.631662    0.631662    0.631662    9,267,581   627,129 254,110 14,980  1.010659e+03    1.010659e+03    1.010659e+03    1.010659e+032   2018    JAN B   700 700 700 700 0.276352    0.276352    0.276352    0.276352    9,267,581   627,129 254,110 14,980  1.934465e+02    1.934465e+02    1.934465e+02    1.934465e+023   2018    JAN C   233 233 233 233 0.091986    0.091986    0.091986    0.091986    9,267,581   627,129 254,110 14,980  2.143269e+01    2.143269e+01    2.143269e+01    2.143269e+01
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python