我有两个dfs
DF1
Len Bar
x a
y a
z a
x b
y b
z b
x c
y c
z c
DF2
Len/Bar a b c
x 4 2 8
y 2 7 7
z 6 3 9
需要输出
Len Bar Amount
x a 4
y a 2
z a 6
x b 2
y b 7
z b 3
x c 8
y c 7
z c 9
在excel中,我使用索引匹配公式=INDEX($B$2:$D$4,MATCH(A19,$A$2:$A$4,0),MATCH(B19,$B$1:$D$1,0))
但有没有办法使用map或merge
来做同样的事情答案 0 :(得分:2)
我认为您首先需要重新塑造df2
,然后merge
与df1
进行左联接:
df2 =df2.set_index('Len/Bar').unstack().rename_axis(('Bar','Len')).reset_index(name='Amount')
df2 = df1.merge(df2, how='left', on=['Len', 'Bar'])
print (df2)
Len Bar Amount
0 x a 4
1 y a 2
2 z a 6
3 x b 2
4 y b 7
5 z b 3
6 x c 8
7 y c 7
8 z c 9
另一种解决方案:
df2 = df2.set_index('Len/Bar').stack().rename_axis(('Bar','Len')).rename('Amount')
df2 = df1.join(df2, on=['Len', 'Bar'])
print (df2)
Len Bar Amount
0 x a 4
1 y a 2
2 z a 6
3 x b 2
4 y b 7
5 z b 3
6 x c 8
7 y c 7
8 z c 9
编辑:
如果您不知道是否需要合并/加入,则取决于是否需要按df2
重新整理df1
过滤器。
见差异:
#removed some rows
print (df1)
Len Bar
0 x a
1 y a
2 z a
3 x b
4 y b
print (df2)
Bar Len Amount
0 a x 4
1 a y 2
2 a z 6
3 b x 2
4 b y 7
5 b z 3
6 c x 8
7 c y 7
8 c z 9
merge
行被来自Len
的{{1}}和Bar
列过滤后:
df1
答案 1 :(得分:2)
顺便说一句,您似乎根本不需要django-rest-auth
:
df1
除非你想从中借用列名:
df3 = df2.set_index('Len/Bar').stack().reset_index()
df3.columns = "Len", "Bar", "Amount"
# Len Bar Amount
#0 x a 4
#1 x b 2
#2 x c 8
#3 y a 2
#4 y b 7
#5 y c 7
#6 z a 6
#7 z b 3
#8 z c 9