2017-10-18 5 views
0

私はのように見えることdf1を持っている:私はシリーズとしてEminemを保存したい2つのデータフレームを別のフレームに変換するにはどうすればよいですか?

   HI  BYBY OKDO  INT 
Date             
2011-01-10 340.99 143.41 614.21  1.0 
2011-01-13 344.20 144.55 616.69  1.0 
2011-01-13 344.20 144.55 616.69  1.0 
2011-01-26 342.38 156.42 616.50  1.0 

:このようになります。その私がdf2を持って

   Shady Slim Eminem 
Date       
2011-01-10 HI  Yes 1500 
2011-01-13 HI  No 1500 
2011-01-13 BYBY Yes 4000 
2011-01-26 OKDO Yes 1000 

。私はまた、df2の各列をシリーズにしたいと思います。 Eminemにこれらの値を掛けて、対応する要素の右側にShadyと掛けて、df3とします。 私はまたINT列がdf3に、各行の行の合計になりたい

のように見えます df3たい。

私はベクター化の方法でこれをしたいと思います。

また、SLIMの列に基づいて、YESの場合は、Eminem * valueを追加したい場合は、それを否定したいと考えています。ここで

は、私がしたい値です。

   HI  BYBY OKDO  INT 
Date             
2011-01-10 511,485  0  0 sum(row 1) 
2011-01-13 -516300 578200 0 sum(row 2) 
2011-01-13 0   578200 0 sum(row 3) 
2011-01-26 0   0  616500 sum(row 4) 

答えて

1

はオプション1
乗算するためのpd.DataFrame.mulメソッドを使用して、あなたがすることによって乗算されているシリーズになりたいことを指定するためにaxisパラメータを提供しますインデックスに沿って並んでいます。

df2.mul(df1.Eminem, axis=0) 

        HI  BYBY  OKDO  SOME  COOL  INT 
Date                 
2011-01-10 511485.0 215115.0 921315.0 108030.0 184785.0 1500.0 
2011-01-13 516300.0 216825.0 925035.0 110310.0 186810.0 1500.0 
2011-01-13 1376800.0 578200.0 2466760.0 294160.0 498160.0 4000.0 
2011-01-26 342380.0 156420.0 616500.0 76370.0 125800.0 1000.0 

オプション2
偶然、あなたが掛けるしようとしているシリーズは、すでにあなたが乗算したい方法で発注される場合は、インデックスとアクセスを見送ることができますvalues属性。

df2.mul(df1.Eminem.values, 0) 

        HI  BYBY  OKDO  SOME  COOL  INT 
Date                 
2011-01-10 511485.0 215115.0 921315.0 108030.0 184785.0 1500.0 
2011-01-13 516300.0 216825.0 925035.0 110310.0 186810.0 1500.0 
2011-01-13 1376800.0 578200.0 2466760.0 294160.0 498160.0 4000.0 
2011-01-26 342380.0 156420.0 616500.0 76370.0 125800.0 1000.0 

オプション3
インデックスが難しい判明した場合、あなたはそれスリムファクター

ユニークな

unique_me = lambda d: d.set_index(d.groupby(level=0).cumcount(), append=True) 
df2.pipe(unique_me).mul(df1.pipe(unique_me).Eminem, axis=0).reset_index(-1, drop=True) 

        HI  BYBY  OKDO  SOME  COOL  INT 
Date                 
2011-01-10 511485.0 215115.0 921315.0 108030.0 184785.0 1500.0 
2011-01-13 516300.0 216825.0 925035.0 110310.0 186810.0 1500.0 
2011-01-13 1376800.0 578200.0 2466760.0 294160.0 498160.0 4000.0 
2011-01-26 342380.0 156420.0 616500.0 76370.0 125800.0 1000.0 

作るレベルを追加することができます

+0

最後に、「スリム」要因があります。 – dirtysocks45

+0

数字は「INT」を除いてすべて正しいです。 intの場合、 'NO'の場合は、その行の他の要素の合計を否定する必要があります。さもなければ、私はそれを行の正の合計にします。 – dirtysocks45

+0

私は必要なものの例を挙げました。 – dirtysocks45

関連する問題