簡體   English   中英

熊貓:在一個數據框中創建新列,並根據與另一個數據框中的匹配鍵進行匹配

[英]Pandas: create new column in one dataframe with values based on matching key from another dataframe

我有兩個pandas數據框,第一個數據框有兩個列假定為鍵和值,第二個數據框僅包含鍵,我想在第二個數據框中添加新列,此列的值應為與第一個數據幀匹配的鍵

df = pd.DataFrame({'vi' : ['a','b','c','d','e'],'s':[2,5,7,0,1]})  
tf = pd.DataFrame({'vi' : ['b','d','c','a','e']})    
df    

vi  s  
 a  2  
 b  5  
 c  7  
 d  0  
 e  1  

tf  

vi    
 b  
 d  
 c  
 a  
 e  

result tf  

vi  s  
 b  5  
 d  0  
 c  7  
 a  2  
 e  1

合並時,您需要指定left以確保tf中的所有值都包含在新數據框中。 由於兩個數據框的鍵列名稱相同,因此請指定on='vi'

df = pd.DataFrame({'vi': ['a', 'b', 'c', 'd', 'e', 'z'],
                   's': [2, 5, 7, 0, 1, 10]})  
tf = pd.DataFrame({'vi': ['b', 'd', 'c', 'a', 'e', 'f']})

>>> tf.merge(df, how='left', on='vi')
  vi   s
0  b   5
1  d   0
2  c   7
3  a   2
4  e   1
5  f NaN

我已經將兩個數據集擴展為一個非唯一值。 請注意,上面的結果與簡單的合並有何不同,默認情況下,簡單的合並會進行內部聯接。

>>> tf.merge(df)
  vi  s
0  b  5
1  d  0
2  c  7
3  a  2
4  e  1

您可以使用tf.merge(df) tfdf 合並 ,示例如下:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'vi' : ['a','b','c','d','e'],'s':[2,5,7,0,1]})  

In [3]: tf = pd.DataFrame({'vi' : ['b','d','c','a','e']}) 

In [4]: tf = tf.merge(df)

In [5]: tf
Out[5]: 
  vi  s
0  b  5
1  d  0
2  c  7
3  a  2
4  e  1

這是您想要的結果。

將列附加到數據框后,行索引由索引確定。

您可以使用

df = pd.DataFrame({'s':[2,5,7,0,1]})  
df.index = ['a','b','c','d','e']

默認情況下,索引是從0到N-1的整數范圍。

暫無
暫無

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

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