我正在尝试动态操作一系列 DataFrame。例如,我想将 DataFrame(‘recs_df’ – 如下)乘以另一个 DataFrame 的值(‘Cost’ – 如下):
recs_df1:
Prod Ord1 Ord2 Ord3
0 Toys 4 2 1
1 Candy 3 1 5
2 Décor 2 3 4
recs_df2:
Prod Ord1 Ord2 Ord3
0 Toys 1 0 6
1 Candy 4 1 5
2 Décor 2 3 4
recs_df3:
Prod Ord1 Ord2 Ord3
0 Toys 1 2 3
1 Candy 0 1 0
2 Décor 1 3 4
cost_df:
Prod Price
0 Toys 2.00
1 Candy 1.00
2 Décor 3.00
The desired outcome is 3 new DataFrames formed by the product of the Cost_df to each of the recs#_df, i.e.:
new_df1:
0 Toys 8.00 4.00 2.00
1 Candy 3.00 1.00 5.00
2 Décor 6.00 9.00 12.00
new_df2:
0 Toys 2.00 0.00 12.00
1 Candy 4.00 1.00 5.00
2 Décor 6.00 9.00 12.00
new_df3:
0 Toys 2.00 4.00 6.00
1 Candy 0.00 1.00 0.00
2 Décor 3.00 9.00 12.00
我尝试过设置 DataFrame 列表,以及直接循环它们,但我总是遇到错误 - 例如:
df_list = [recs_df1, recs_df2, recs_df3]
for df in df_list:
new_df.append(cost_df*df_list)
new_dfs = [ ]
for j in range(3):
for i in range(0,len(recs_df[j].index)):
new=append((cost_df*df_list[j])
new_dfs=pd.DataFrame(new)
显然,我很困惑。我欢迎您的建议 – 谢谢。
如果你使用公共列作为索引,事情会变得简单一些:
recs_df1 = pd.DataFrame(
{'Ord1':[4, 3, 2],
'Ord2': [2, 1, 3],
'Ord3': [1, 5, 4]},
index=['Toys', 'Candy', 'Décor'])
recs_df2 = pd.DataFrame(
{'Ord1':[1, 4, 2],
'Ord2': [0, 1, 3],
'Ord3': [6, 5, 4]},
index=['Toys', 'Candy', 'Décor'])
recs_df3 = pd.DataFrame(
{'Ord1':[1, 0, 1],
'Ord2': [2, 1, 3],
'Ord3': [3., 0, 4]},
index=['Toys', 'Candy', 'Décor'])
costs_df = pd.DataFrame(
{'Price': [2., 1., 3.]}, index=['Toys', 'Candy', 'Décor'])
dfs = [recs_df1, recs_df2, recs_df3]
new_dfs = []
for df in dfs:
new_df = df.copy()
for col in new_df:
new_df[col] = new_df[col] * costs_df.Price
new_dfs.append(new_df)
你也可以在 numpy 中进行乘法:
new_dfs = [
pd.DataFrame(
costs_df.to_numpy() * df.to_numpy(),
columns=df.columns,
index=df.index)
for df in dfs]
...Pandas 中似乎应该有一个类似的方法,但我无法让它发挥作用。