我有两个数据框,我试图合并。它们每个都有一个多指数,但这些指数没有重叠的水平。 dfs的宽度都相同。
DF1
v1 v2 v3 v4 v5
location year
A 1990 1 3 2 1 4
2000 2 5 0 3 1
B 1990 6 2 1 2 1
2000 3 4 5 0 0
DF2
v1 v2 v3 v4 v5
age sex
5 M 0 0 1 0 1
F 1 0 1 1 1
10 M 1 0 0 0 0
F 0 1 1 0 0
我想创建一个新的数据框,其中包含两个索引的每个组合的条目,其值等于相应列中值的乘积:
结果
v1 v2 v3 v4 v5
location year age sex
A 1990 5 M 0 0 2 0 4
F 1 0 2 1 4
10 M 1 0 0 0 0
F 0 3 2 0 0
2000 5 M 0 0 0 0 1
F 2 0 0 3 1
10 M 2 0 0 0 0
F 0 5 0 0 0
B 1990 5 M 0 0 1 0 1
. .
. .
etc
我想我可以加入dfs,然后逐列相乘,但我想知道是否有更自动的方法,因为乘法中构建的pandas要快得多。
谢谢!
答案 0 :(得分:1)
您可以使用numpy
+ pandas
df_new=pd.DataFrame(data=np.concatenate(df1.values[:,None]*df2.values),
columns=df1.columns,
index=np.concatenate(df1.index.values[:,None]+df2.index.values))
df_new.index=pd.MultiIndex.from_tuples(df_new.index)
df_new
Out[162]:
v1 v2 v3 v4 v5
A 1990 5 M 0 0 2 0 4
F 1 0 2 1 4
10 M 1 0 0 0 0
F 0 3 2 0 0
2000 5 M 0 0 0 0 1
F 2 0 0 3 1
10 M 2 0 0 0 0
F 0 5 0 0 0
B 1990 5 M 0 0 1 0 1
F 6 0 1 2 1
10 M 6 0 0 0 0
F 0 2 1 0 0
2000 5 M 0 0 5 0 0
F 3 0 5 0 0
10 M 3 0 0 0 0
F 0 4 5 0 0