如何按元素乘以数据帧并创建多索引 -- Python
how to multiply dataframes elementwise and create multi-index -- Python
我有两个 DataFrame date
和 supply
:
data =
Nov_15 DEc_15 Jan_16
0 2 4 6
1 3 5 7
supply =
c1 c2
0 1 2
1 3 4
2 5 6
我想按元素将 supply
的 c1
列乘以 date
的行 0
,并将 c2
列乘以行 1
.结果应如下所示:
Nov_15 Nov_15 Dec_15 Dec_15 Jan_16 Jan_16
c1 c2 c1 c2 c1 c2
0 2 6 4 10 6 14
1 6 12 12 20 18 28
2 10 18 20 30 30 42
我可以为此编写一个函数吗?
您可以重新索引这两个数据帧,使它们 index/column 匹配,然后将它们相乘:
df1 = pandas.DataFrame([[i*j for i in range(1, 3)] for j in range(2, 5)], index=list('abc'), columns=list('AB'))
print df1
df2 = pandas.DataFrame([[i*10**j for i in range(1, 4)] for j in range(1, 3)], columns=list('abc'))
print df2
df11 = df1.reindex(columns=pandas.MultiIndex.from_product([df1.columns, df2.index]), level=0)
print df11
df22 = df2.T.reindex(columns=pandas.MultiIndex.from_product([df1.columns, df2.index]), level=1)
print df22
df3 = df11.mul(df22)
print df3
我有两个 DataFrame date
和 supply
:
data =
Nov_15 DEc_15 Jan_16
0 2 4 6
1 3 5 7
supply =
c1 c2
0 1 2
1 3 4
2 5 6
我想按元素将 supply
的 c1
列乘以 date
的行 0
,并将 c2
列乘以行 1
.结果应如下所示:
Nov_15 Nov_15 Dec_15 Dec_15 Jan_16 Jan_16
c1 c2 c1 c2 c1 c2
0 2 6 4 10 6 14
1 6 12 12 20 18 28
2 10 18 20 30 30 42
我可以为此编写一个函数吗?
您可以重新索引这两个数据帧,使它们 index/column 匹配,然后将它们相乘:
df1 = pandas.DataFrame([[i*j for i in range(1, 3)] for j in range(2, 5)], index=list('abc'), columns=list('AB'))
print df1
df2 = pandas.DataFrame([[i*10**j for i in range(1, 4)] for j in range(1, 3)], columns=list('abc'))
print df2
df11 = df1.reindex(columns=pandas.MultiIndex.from_product([df1.columns, df2.index]), level=0)
print df11
df22 = df2.T.reindex(columns=pandas.MultiIndex.from_product([df1.columns, df2.index]), level=1)
print df22
df3 = df11.mul(df22)
print df3