我有两个数据帧可以说:与列“名”python中是否有任何列匹配或行匹配函数?
name
0 4
1 2
2 1
3 3
有两列的另一数据帧乙即名称和值
name value
0 3 5
1 2 6
2 4 7
3 1 8
我要重新排列的
数据帧一数据帧B中的值根据数据帧中的名称列A
我期待的最终数据帧与此类似:
name value
0 4 7
1 2 6
2 1 8
3 3 5
我有两个数据帧可以说:与列“名”python中是否有任何列匹配或行匹配函数?
name
0 4
1 2
2 1
3 3
有两列的另一数据帧乙即名称和值
name value
0 3 5
1 2 6
2 4 7
3 1 8
我要重新排列的
数据帧一数据帧B中的值根据数据帧中的名称列A
我期待的最终数据帧与此类似:
name value
0 4 7
1 2 6
2 1 8
3 3 5
这里有两种选择:
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
哪个在时间复杂度或性能方面更好?以及如何找到这些细微差别? –
@HarshavardhanRamanna他们之间的主要区别是'map'会返回'NaN'如果没有找到值。另一方面,'loc'会完全丢失该行。我已经添加了时间表,我不认为表现有很大的不同。第一个比较慢,但主要是因为'.loc'通常比较慢。当你用'.ix'替换它们时,它们几乎是一样的。 – ayhan
http://stackoverflow.com/questions/13838405 /定制分拣中盘das-dataframe –