2015-12-22 62 views
0

我有两个熊猫数据框,第一个数据框有两列假定为键和值,第二个数据框只包含键,而我想在第二数据帧添加新列此列中的值应是熊猫:在一个数据帧中创建新的列,其值基于来自另一个数据帧的匹配关键字

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 

回答

2

可以mergetfdf使用tf.merge(df),例如用下面的结果用于从所述第一数据帧的匹配的键的值:

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 

这是你想要的结果。

0

将列附加到数据帧时,行索引由索引确定。

可以设置使用

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

默认情况下,索引是从0到N-1的范围内的整数的索引。

3

合并时,您希望指定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 
相关问题