Python Pandas:在一个数据帧中创建新列,其值基于另一个数据帧中的匹配键
我有两个数据帧,第一个数据帧有两列,假设是键和值,第二个数据帧只包含键,我想在第二个数据帧中添加一个新列。该列的值应该是第一个数据帧中匹配键的值Python Pandas:在一个数据帧中创建新列,其值基于另一个数据帧中的匹配键,python,pandas,Python,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
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
您可以使用tf.merge(df)
使用df
使用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
这是您想要的结果。您可以使用tfdf
使用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
这是您想要的结果。将列追加到数据帧时,行索引由索引确定
您可以使用
df = pd.DataFrame({'s':[2,5,7,0,1]})
df.index = ['a','b','c','d','e']
默认情况下,索引是从0到N-1的整数范围。将列追加到数据帧时,行索引由索引确定
您可以使用
df = pd.DataFrame({'s':[2,5,7,0,1]})
df.index = ['a','b','c','d','e']
默认情况下,索引是从0到N-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
合并时,您需要指定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