Python
1maker_tbl = df2.loc[df2['項目'] == 'メーカーNo.', 'メーカーNo.':].set_index('メーカーNo.', drop=True).iloc[:,0]
のような処理を施すことで
メーカーNo | |
---|
1 | トヨタ |
2 | ホンダ |
3 | 日産 |
4 | 三菱 |
5 | フェラーリ |
6 | ジャガー |
のようなSeriesデータを作成できますので、後は
Python
1df1['メーカー名'] = df1['メーカー'].map(maker_tbl)
のようにSeries.map()
にて引き当てると良いと思います。
(年齢層も全く同じ処理でいけます。)
以下、動作サンプル
Python
1import pandas as pd
2import numpy as np
3
4N = 10
5df1 = pd.DataFrame(
6{
7 '年齢' : np.random.randint(1,7,N),
8 'メーカー' : np.random.randint(1,7,N)
9})
10
11df2 = pd.DataFrame({
12 '項目': ['メーカーNo.'] * 6 + ['年齢層'] * 6,
13 'メーカーNo.': [1,2,3,4,5,6,1,2,3,4,5,6],
14 '?': ['トヨタ','ホンダ','日産','三菱','フェラーリ','ジャガー',
15 '10代','20代','30代','40代','50代','60代']
16})
17
18maker_tbl = df2.loc[df2['項目'] == 'メーカーNo.', 'メーカーNo.':].set_index('メーカーNo.', drop=True).iloc[:,0]
19age_tbl = df2.loc[df2['項目'] == '年齢層', 'メーカーNo.':].set_index('メーカーNo.', drop=True).iloc[:,0]
20
21df1['年齢層'] = df1['年齢'].map(age_tbl)
22df1['メーカー名'] = df1['メーカー'].map(maker_tbl)
23print(df1)
24# 年齢 メーカー 年齢層 メーカー名
25#0 1 5 10代 フェラーリ
26#1 4 2 40代 ホンダ
27#2 2 4 20代 三菱
28#3 1 2 10代 ホンダ
29#4 2 1 20代 トヨタ
30#5 2 3 20代 日産
31#6 1 3 10代 日産
32#7 3 4 30代 三菱
33#8 3 3 30代 日産
34#9 1 5 10代 フェラーリ