簡體   English   中英

與python索引匹配

[英]Index match with python

我有兩個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做同樣的事情

我認為您需要首先重塑df2 ,然后與df1左連接merge

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

編輯:

如果您不知道是否需要合並/連接,則取決於是否需要通過df1將過濾器重塑df2

看到差異:

#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行之后,通過df1 LenBar列對行進行過濾:

print (df3)
  Len Bar  Amount
0   x   a       4
1   y   a       2
2   z   a       6
3   x   b       2
4   y   b       7

順便說一句,您似乎根本不需要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

除非您想從中借用列名:

df3.columns = df1.columns + ("Amount",)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM