python中是否有列匹配或行匹配功能?

时间:2016-09-14 15:20:00

标签: python pandas dataframe

我有两个数据框可以说:

数据框A,列名为'

    name
0   4
1   2
2   1
3   3

另一个具有两列的数据帧B,即名称和值

  name  value
0   3     5
1   2     6
2   4     7
3   1     8

我想根据数据框A中的名称列重新排列数据框B中的值

我期待与此类似的最终数据框架:

  name   value
0   4      7
1   2      6
2   1      8
3   3      5

1 个答案:

答案 0 :(得分:1)

以下是两个选项:

dfB.set_index('name').loc[dfA.name].reset_index()
Out: 
   name  value
0     4      7
1     2      6
2     1      8
3     3      5

或者,

dfA['value'] = dfA['name'].map(dfB.set_index('name')['value'])

dfA
Out: 
   name  value
0     4      7
1     2      6
2     1      8
3     3      5

时序:

import numpy as np
import pandas as pd
prng = np.random.RandomState(0)
names = np.arange(10**7)
prng.shuffle(names)
dfA = pd.DataFrame({'name': names})
prng.shuffle(names)
dfB = pd.DataFrame({'name': names, 'value': prng.randint(0, 100, 10**7)})

%timeit dfB.set_index('name').loc[dfA.name].reset_index()
1 loop, best of 3: 2.27 s per loop

%timeit dfA['value'] = dfA['name'].map(dfB.set_index('name')['value'])
1 loop, best of 3: 1.65 s per loop

%timeit dfB.set_index('name').ix[dfA.name].reset_index()
1 loop, best of 3: 1.66 s per loop