Skip to main content
 首页 » 编程设计

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

2025年05月04日17lori

我有两个数据框,第一个 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)