python - 点积过滤数据框 pandas

标签 python pandas numpy filter

假设我有两个这样的 pandas 数据框:

df1 = pd.DataFrame({'Component': ['A','B','C','D'],'Theme': ['T1','T2','T3','T3'],'Weights': [0.5,0.1,0.1,0.3]},index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': [-0.1,0.05,-0.07,-0.5,0.02],'B': [-0.3,0.02,-0.01,-0.4,0.01],'C': [-0.8,0.00,-0.01,-0.1,0.07],'D': [-0.08,0.1,-0.01,-0.05,0.03],},index=[0, 1, 2, 3,4])

我正在寻找一种“智能方法”来计算按主题分组的两个数据框的“和积”(或点积)。问题是第二个数据帧中缺少“主题”,链接两个数据帧的唯一方法是通过组件。

我们举个例子: 对于主题 T3,结果应该是这样的数据框:

df3=pd.DataFrame({'T3':[-0.104,0.03,-0.004,-0.025,0.016]},index=[0, 1, 2, 3,4])

计算细节如下(df1(按主题T3过滤)和df2的和:

0.1*-0.8+0.3*-0.08 = -0.104

0.1*0+0.3*0.1=0.03

0.1*-0.01+0.3*-0.01=-0.004

0.1*-0.1+0.3*-0.05=-0.025

0.1*0.07+0.3*0.03=0.016

如果我们将 df1 和 df2 转换为两个 numpy 数组,我们可以进行转置(df1)和转置(df2)的点积。那会很完美。但是,由于我需要按主题进行过滤,所以我有点卡住了。

总的来说,我想要 3 个数据框(因为我有 3 个主题)

有什么建议吗?谢谢。

最佳答案

两边设置相同的索引,这是dot产品的要求:

df1 = df1.set_index('Component')

使用 where 应用所需的过滤条件,然后用 0 填充 NA 值:

df2.dot(df1.where(df1.Theme=='T3').Weights.fillna(0))

0   -0.104
1    0.030
2   -0.004
3   -0.025
4    0.016
dtype: float64

关于python - 点积过滤数据框 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49897926/

相关文章:

python - Tweepy 光标搜索查询可以遍历从文件加载的单词列表吗?

pandas - Pyspark、Spark SQL 和 toPandas().shape 中计数不一致的原因是什么?

python - 使用另一列作为索引的 Pandas 子字符串

python - 当数据框中的列中的值发生变化时查找索引值 - Pandas

python - 匹配内部带有双引号的双引号字符串

python - 试图找到包含文本的 href

numpy - 使用 .format() 在 NumPy 结构化数组和原生字符串格式中 float

python - 在 Windows 下使用 NumPy 数组对图像进行快速傅里叶变换期间的内存错误

python - 如何通过在 NumPy 中使用切片来反转二维矩阵的值?

python - 为什么 pygame 窗口不能正常关闭?