我有兩個數據幀可以說:與列「名」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 –