我在df1
中有以下数据帧(df2
和pandas
)。我要实现的是将df1
与df2
匹配的列标题相乘并创建df3
。预期结果是
df3 = pd.DataFrame([{'A':2,'B':2.2,'C':20},
{'A':2.5,'B':2.8,'C':24},
{'A':3.0,'B':2.8,'C':24.8}])
我尝试使用df3 = df1.mul(df2,axis=1)
,但是它不起作用。它产生了很多NaN
并提供了额外的2列。谁能分享一些提示?
df1 = pd.DataFrame([{'A':20,'B':22,'C':25},
{'A':25,'B':28,'C':30},
{'A':30,'B':28,'C':31}])
df2 = pd.DataFrame([{'X':'A','Y':0.1},
{'X':'B','Y':0.1},
{'X':'C','Y':0.8}])
答案 0 :(得分:2)
我将public Command SendCommand => new Command(async () => await SendMessage(OutGoingText));
更改为df2
-这就是您要的东西吗?
s2
结果是:
df1 = pd.DataFrame([{'A':20,'B':22,'C':25},
{'A':25,'B':28,'C':30},
{'A':30,'B':28,'C':31}])
s2 = pd.Series(data=[0.1, 0.1, 0.8],
index=['A', 'B', 'C'])
df1.mul(s2)
答案 1 :(得分:1)
获取各列以使其与索引对齐,相乘并拆栈以返回结果
df1.stack().mul(df2.set_index("X").Y, level=-1).unstack()
A B C
0 2.0 2.2 20.0
1 2.5 2.8 24.0
2 3.0 2.8 24.8
注意:这适用于更多行(如您在评论中提到的50行)