为了账号安全,请及时绑定邮箱和手机立即绑定

预测依据历史人物

预测依据历史人物

紫衣仙女 2021-09-24 16:07:16
我想根据历史数据预测分配。用户提供的手动输入:year    month     x          y          z          k2018    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   k2018    JAN A   p   Y   600 600 600 6002018    JAN A   p   N   200 200 200 2002018    JAN B   r   Y   400 400 400 4002018    JAN A   r   Y   400 400 400 4002018    JAN A   r   N   400 400 400 4002018    JAN B   r   N   300 300 300 3002018    JAN C   s   Y   200 200 200 2002018    JAN C   s   N   10  10  10  102018    JAN C   t   Y   11  11  11  112018    JAN C   t   N   12  12  12  122018    FEB A   p   Y   789 789 789 7892018    FEB A   p   N   2093874 2093874 2093874 2093874我试过is_p从总数中计算分配,比如我添加了某些列来计算分配百分比:%ofx_segment= 600+200+400+400/600+200+400+400+400+300+200+10+11+12。这会给我多少 x 从段贡献 y,z,k 也是如此我将手动输入的 9276581 * 乘以%ofx_segment计算 segment_x 的值然后,我计算%_pg。对于 2018 年 1 月的 A 段,%_pg= 600+200/600+200+400+400然后,我乘以从步骤 2 收到的手动输入 * %pg 从 3 收到的 'p' in pg for A 段然后,最后,我将计算 is_p 的 %,我将计算 % Y 或 %N for p in pg for A in segment % Y is =600/600+200。从步骤 5 收到的值必须乘以从 4 收到的输出。import pandas as pdfirst=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)
查看完整描述

4 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

您需要加入这两个数据框以执行两列的乘法。


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 allocationk

0   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+06

1   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+03

2   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+02

3   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



查看完整回答
反对 回复 2021-09-24
  • 4 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信