我有两个数据框可以说:
数据框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
答案 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