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