将python中索引相似的两个数据帧相乘
我有两个数据帧,我想把它们乘以索引。最好的方法是什么? 注意:列名是不同的将python中索引相似的两个数据帧相乘,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,我想把它们乘以索引。最好的方法是什么? 注意:列名是不同的 df1 = pd.DataFrame([(1,2,3),(3,4,5),(5,6,7)], columns=['a','b','d'], index = ['A', 'B','C']) df1 a b d A 1 2 3 B 3 4 5 C 5 6 7 df2 = pd.DataFrame([(10,20,30)], columns=['A','B','C'],index = ['ss'])
df1 = pd.DataFrame([(1,2,3),(3,4,5),(5,6,7)], columns=['a','b','d'], index = ['A', 'B','C'])
df1
a b d
A 1 2 3
B 3 4 5
C 5 6 7
df2 = pd.DataFrame([(10,20,30)], columns=['A','B','C'],index = ['ss'])
df2 = df2.transpose()
df2
ss
A 10
B 20
C 30
输出数据帧:
a b d
A 10 20 30
B 60 80 100
C 150 180 210
一种方法是在Numpy数组上进行乘法,如
In [8]: pd.DataFrame(df1.values*df2.values,
columns=['a','b','d'], index = ['A', 'B','C'])
Out[8]:
a b d
A 10 20 30
B 60 80 100
C 150 180 210
调用并将序列转换为列表并传递axis=0
,通过转换为列表,我们忽略索引/列名的任何对齐错误:
In [74]:
df1.mul(list(df2['ss']), axis=0)
Out[74]:
a b d
A 10 20 30
B 60 80 100
C 150 180 210
编辑
无需转换为列表,只需直接访问该系列:
In [75]:
df1.mul(df2['ss'], axis=0)
Out[75]:
a b d
A 10 20 30
B 60 80 100
C 150 180 210
如果要将一列DF相乘而不考虑其列名,最好将其设为一个系列,这可以通过
.squence()
方法实现。然后:
>>> df1.mul(df2.squeeze(), axis='index')
a b d
A 10 20 30
B 60 80 100
C 150 180 210
要获取以下输出数据帧,如上所述:
a b d
A 10 20 30
B 60 80 100
C 150 180 210
。。。执行以下操作:
df3 = pandas.DataFrame(df1.values*df2.values, columns=df1.columns, index=df1.index)
这将执行逐列乘法。如果矩阵和向量(df2)不共享相同的索引,这将产生错误。请尝试:df2=pd.DataFrame([(10,20,30)],列=['A','C','D'],索引=['ss'])。T@AlexanderOP特别发布了两个df具有与@EdChum相同指示等级的示例。即使使用@Alexander的示例,您仍然可以删除不匹配的索引,对吗
df1.mul(df2['ss'],axis='index').dropna()
@Alexander通过使用该示例df,发布的答案都不正确,只是指出如果它们不同,此解决方案将不起作用@BrenBarn的解决方案使用替代df2定义。