我有以下两个数据框,我想创建第三个df3数据框:
df1
这是生成它的代码:
目标是将df1中的每一列与df2中对应的列相乘,忽略多重索引的第一层。
df1
Monday_One Monday_Two Tuesday
Water Water Ice
Cold Hot Hot Cold
0 4 1 1 10
1 5 2 2 9
2 6 3 7 8
3 7 3 4 7
4 8 5 5 6
df2
Area
Water Ice
Cold Hot Cold
0 4 1 10
1 5 2 9
2 6 3 8
3 7 4 7
4 8 5 6
df3
Monday_One Monday_Two Tuesday
Water Water Ice
Cold Hot Hot Cold
0 16 1 1 100
1 25 4 4 81
2 36 9 21 64
3 49 12 16 49
4 64 25 25 36
这是生成它的代码:
idx = pd.IndexSlice
data = {'Col1': [4, 5, 6, 7, 8], 'Col2': [1, 2, 3, 3, 5], 'Col3': [1, 2, 7, 4, 5], 'Col4': [10, 9, 8, 7, 6]}
col = pd.MultiIndex.from_tuples([('Monday_One', 'Water', 'Cold'), ('Monday_One', 'Water', 'Hot'),
('Monday_Two', 'Water', 'Hot'), ('Tuesday', 'Ice', 'Cold')])
df1 = pd.DataFrame(data)
df1.columns = col
data = {'Col1': [4, 5, 6, 7, 8], 'Col2': [1, 2, 3, 4, 5], 'Col3': [10, 9, 8, 7, 6]}
col = pd.MultiIndex.from_tuples([('Area', 'Water', 'Cold'), ('Area', 'Water', 'Hot'),
('Area', 'Ice', 'Cold')])
df2 = pd.DataFrame(data)
df2.columns = col
data = {'Col1': [0, 0, 0, 0, 0]}
col = pd.MultiIndex.from_tuples([('One', 'One', 'One')])
df3 = pd.DataFrame(data)
df3.columns = col
df3[('Monday_One', 'Water', 'Cold')] = df1[('Monday_One', 'Water', 'Cold')] * df2[('Area', 'Water', 'Cold')]
df3[('Monday_One', 'Water', 'Hot')] = df1[('Monday_One', 'Water', 'Hot')] * df2[('Area', 'Water', 'Hot')]
df3[('Monday_Two', 'Water', 'Hot')] = df1[('Monday_Two', 'Water', 'Hot')] * df2[('Area', 'Water', 'Hot')]
df3[('Tuesday', 'Ice', 'Cold')] = df1[('Tuesday', 'Ice', 'Cold')] * df2[('Area', 'Ice', 'Cold')]
df3 = df3.drop(df3.columns[0], axis=1)
目标是将df1中的每一列与df2中对应的列相乘,忽略多重索引的第一层。
df2
中删除第一级,那么MultiIndex
值是否唯一? - jezraeldf2.droplevel(0, axis=1).columns.is_unique
- jezrael