【问题标题】:Pandas DataFrame multiplication with respect to MultiIndexPandas DataFrame 相对于 MultiIndex 的乘法
【发布时间】:2017-03-30 13:40:13
【问题描述】:

我想将以下两个 DataFrame 与第二个 DataFrame 的 MultiIndex foreach 维度相乘

base = pd.DataFrame({'date':pd.date_range('2000-01-01', periods=3),
                    'id':[1,2,1],
                    'V1':[.3,.3,.1]}).set_index(['date','id'])
print (base)
                V1
date       id          
2000-01-01 1   0.3
2000-01-01 2   0.1
2000-01-02 1   0.3
2000-01-02 2   0.1


ref = pd.DataFrame({'1':[1,2],'2':[1,2]}, index=[1,2])
ref.index.name = 'id'
print (ref)
    1  2
id
1   2  1  
2   1  2

然后存档:

                 V1
date       id          
2000-01-01 1   (2*0.3 + 1*0.1)
2000-01-01 2   (2*0.1 + 1*0.3)
2000-01-01 1   (2*0.3 + 1*0.1)
2000-01-01 2   (2*0.1 + 1*0.3)

我用这段代码试了一下(foreach id):

base.unstack(level='id').apply(lambda x: np.asarray(x) * np.asarray(ref.loc[??]), axis=1).stack().groupby(level='date').sum()

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    既然你想要产品和总和...I think dot product.

    base.V1.unstack().dot(ref).stack()
    
    date         
    2000-01-01  1    0.7
                2    0.5
    2000-01-02  1    0.7
                2    0.5
    dtype: float64
    

    设置
    这提供了 OP 显示的数据

    base = pd.DataFrame(
        dict(V1=[.3, .1] * 2),
        pd.MultiIndex.from_product(
            [pd.to_datetime(['2000-01-01', '2000-01-02']), [1, 2]])
    )
    
    ref = pd.DataFrame({1:[2,1],2:[1,2]}, index=pd.Index([1, 2], name='id'))
    

    【讨论】:

    • ValueError: 矩阵未对齐
    猜你喜欢
    • 2012-11-18
    • 1970-01-01
    • 2019-05-20
    • 2017-08-25
    • 2016-11-06
    • 1970-01-01
    • 2017-03-28
    • 2021-05-18
    • 2023-03-25
    相关资源
    最近更新 更多