2017-01-01 16 views
2

人の名前に給与情報を上書きするデータフレーム(たとえば、df3)を作成しようとしています。私は現在約1,000の名前のリストでdf1を使って作業しています。 df1の例を以下に示します。複数の列を1つのデータフレームにマッピングする

print df1.head() 

       Salary 
    Name  
    Joe Smith 8700 
    Jane Doe 6300 
    Rob Dole 4700 
    Sue Pam 2100 
    Jack Li 3400 

私はまた、ランダムにキャプテンとスキッパーのいずれかの列としてdf1から人々を割り当てdf2を、持っています。

print df2.head() 

    Captain Skipper 
    Sue Pam Joe Smith 
    Jane Doe Sue Pam 
    Rob Dole Joe Smith 
    Joe Smith Sue Pam 
    Rob Dole Jack Li 

私は以下のこの正確な形式を持っているように、どのように私はそれに対応する給与とdf2で名前を置き換えることができます。 Excelでは、VLOOKUP関数を使用しますが、Pythonを使用してこれを達成する方法がわかりません。

print df3.head() 

    Captain Skipper 
    2100  8700 
    6300  2100 
    4700  8700 
    8700  2100 
    4700  3400 

答えて

1

あなたはdf1['Salary']に応じdf2の各列をマップするためにdf2[col].map(df1['Salary'])を使用することができます。

import pandas as pd 
df1 = pd.DataFrame({'Salary':[8700,6300,4700,2100,3400]}, index=pd.Series(['Joe Smith', 'Jane Doe', 'Rob Dole', 'Sue Pam', 'Jack Li'], name='Name')) 
df2 = pd.DataFrame({'Captain':['Sue Pam', 'Jane Doe', 'Rob Dole', 'Joe Smith', 'Rob Dole'], 'Skipper': ['Joe Smith', 'Sue Pam', 'Joe Smith', 'Sue Pam', 'Jack Li']}) 

df3 = pd.DataFrame({col: df2[col].map(df1['Salary']) for col in df2}) 
print(df3) 

利回り

Captain Skipper 
0  2100  8700 
1  6300  2100 
2  4700  8700 
3  8700  2100 
4  4700  3400 
+0

ありがとうございます! – HelloMello27

1

をあなたはdf1.loc[name, 'Salary']df1にそれぞれの名前のために給与を検索することができます。 .applymap()を使用して、df2のすべての列のすべてのエントリのためにこれを行うことができます。

df3 = df2.applymap(lambda x: df1.loc[x, 'Salary']) 
print(df3) 

結果:

Captain Skipper 
0  2100  8700 
1  6300  2100 
2  4700  8700 
3  8700  2100 
4  4700  3400 
+0

Workedも同様です。ありがとうございました! – HelloMello27

1

私はdf2シリーズを作るためにstackと組み合わせpd.Series.map機能を活用したいです。その後、unstack戻る。

  • stackdf2それあなたのデータフレーム

df2.stack().map(df1.Salary).unstack() 

    Captain Skipper 
0  2100  8700 
1  6300  2100 
2  4700  8700 
3  8700  2100 
4  4700  3400 
+0

うまくいった。ありがとうございました! – HelloMello27

0

dataframe.replace方法は、ルックアップを行うよりも適している取り戻すためdf1.Salary

  • unstackと直列
  • 使用mapようにします。

    >>> df1 = pd.DataFrame({'Salary':[8700,6300,4700,2100,3400]}, index=pd.Series(['Joe Smith', 'Jane Doe', 'Rob Dole', 'Sue Pam', 'Jack Li'], name='Name')) 
    >>> df2 = pd.DataFrame({'Captain':['Sue Pam', 'Jane Doe', 'Rob Dole', 'Joe Smith', 'Rob Dole'], 'Skipper': ['Joe Smith', 'Sue Pam', 'Joe Smith', 'Sue Pam', 'Jack Li']}) 
    >>> df2.replace(df1.Salary) 
        Captain Skipper 
    0  2100  8700 
    1  6300  2100 
    2  4700  8700 
    3  8700  2100 
    4  4700  3400 
    
  • 関連する問題