python - 乘以关于列名的不同长度的数据帧

标签 python pandas dataframe match matrix-multiplication

我有两个数据框,第一个 df1 只包含一行:

   A  B  C  D  E
0  5  8  9  5  0

第二个有多行,但列数相同:

   D  C  E  A  B
0  5  0  3  3  7
1  9  3  5  2  4
2  7  6  8  8  1
3  6  7  7  8  1
4  5  9  8  9  4
5  3  0  3  5  0
6  2  3  8  1  3
7  3  3  7  0  1
8  9  9  0  4  7
9  3  2  7  2  0

在实际示例中,我有更多的列(超过 100 个)。这两个数据框具有相同的列数和相同的列名,但列的顺序不同,如示例所示。 我应该将两个数据帧相乘(类似矩阵的乘法),除了我无法执行简单的 df2.values * df1.values 因为列的排序方式不同,所以例如第二列df1 B 不能在 df2 的第二列相乘,因为我们在 df2 的第二列找到 C 而不是 B,而B 列是 df2 中的第 5 列。

考虑到列名而不是列索引,是否有简单的 pythonic 解决方案来乘以数据帧?

最佳答案

df1[df2.columns] 返回一个数据帧,其中的列按照 df2 中的顺序排列:

df1
Out[91]: 
   A  B  C  D  E
0  3  8  9  5  0

df1[df2.columns]
Out[92]: 
   D  C  E  A  B
0  5  9  0  3  8

所以,你只需要:

df2.values * df1[df2.columns].values

如果你在 df2 中有额外的列,这将引发一个关键错误;即使您在 df1 中有更多列,它也只会选择 df2 的列。

正如@MaxU 指出的那样,由于您正在对 numpy 数组进行操作,因此为了返回数据帧结构,您需要:

pd.DataFrame(df2.values * df1[df2.columns].values, columns = df2.columns)

关于python - 乘以关于列名的不同长度的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36967752/

相关文章:

python - Websocket 与 Django 中的 Channels 断开连接

python - 循环一个 pandas 列以将值与另一个数据帧的索引进行匹配

python - Pandas 数据框 : get unique values from a timestamp column

r - 如何逐行求和?

python - Pandas 切 : how to convert categorical labels to strings (otherwise cannot export to Excel)?

python - 在 Python 中解析制表符分隔的文件

python - Tkinter 如何更改 TreeView 所选项目的颜色

python - Django模板比较字符串

python - 如何在聚合函数中选择多列?

python - 如何在 Pandas Dataframe 中迭代计数