首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将DataFrame与重复索引值相乘

将DataFrame与重复索引值相乘
EN

Stack Overflow用户
提问于 2017-02-26 18:19:38
回答 1查看 743关注 0票数 0

我试图用一个序列来乘一个DataFrame,其中DataFrame具有与Series完全相同的索引,尽管具有重复的索引值。所期望的结果是,根据索引的值,DataFrame中的每一行被乘以序列中的相应值。

将具有重复索引值的系列相乘,效果非常好:

代码语言:javascript
运行
复制
import pandas as pd
weights = pd.Series([10, 100], [0, 1])
s = pd.Series([1, 2, 3, 4], [0, 0, 1, 1])
s.mul(weights)

产生预期结果:

代码语言:javascript
运行
复制
0     10
0     20
1    300
1    400

然而,将DataFrame与重复的索引值相乘会产生一个ValueError:无法从重复轴重新索引

代码语言:javascript
运行
复制
df = pd.DataFrame({'a': [1, 2, 3, 4], 'b': [-1, -2, -3, -4]}, [0, 0, 1, 1])
df.mul(weights, axis=0)
...
ValueError: cannot reindex from a duplicate axis

如何取得以下结果?

代码语言:javascript
运行
复制
     a    b
0   10  -10
0   20  -20
1  300 -300
1  400 -400

编辑:

一种选择是首先重新编制权重系列的索引:

代码语言:javascript
运行
复制
df.mul(weights.reindex(df.index, method='ffill'), axis=0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-26 18:23:43

如何使用apply方法使数据帧逐列相乘?

代码语言:javascript
运行
复制
df.apply(lambda col: col.mul(weights))

#     a    b
#0   10  -10
#0   20  -20
#1  300 -300
#1  400 -400
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42472333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档