Слияние фрейма данных - PullRequest
0 голосов
/ 30 мая 2018

У меня есть 2 кадра данных,

Первый из них

+------------------------------------------+
|       ID             CustomerType Choice |
+------------------------------------------+
| 0    1.0               Durability    OEM |
| 1    2.0                    Price    OEM |
| 2    3.0               Durability    OEM |
| 3    4.0               Durability    OEM |
| 4    5.0               Durability    OEM |
| 5    6.0  ManufacturerCredibility    OEM |
| 6    7.0                 Warranty    OEM |
| 7    8.0  ManufacturerCredibility    OEM |
| 8    9.0               Durability    OEM |
| 9   10.0                    Price    OEM |
| 10  11.0               Durability    TPN |
| 11  12.0                 Warranty    OEM |
| 12  13.0               Durability    TPN |
+------------------------------------------+

, а второй:

 --------------------------------------------------------+
|        Price  Durability  Warranty  Manufacture   Type |
+--------------------------------------------------------+
| OEM     1.00         4.0       4.0          4.0    OEM |
| TPN     0.80         4.0       1.0          1.0    TPN |
| Reman   0.55         4.0       0.5          1.0  Reman |
| Reuse   0.45         2.5       0.0          1.0  Reuse |
+--------------------------------------------------------+

Мне нужно объединить эти 2 кадра данныхиспользуя «Выбор» из первого кадра данных и «Тип» из второго кадра данных.

В настоящее время я использую

data = pd.merge(survey,rel_attr, left_on = 'Choice', right_on = 'Type',how='left')

и получаю неловкий результат, подобный этому.

+------------------------------------------------------------------------------+
|     Price  Durability  Warranty  Manufacture             CustomerType Choice |
+------------------------------------------------------------------------------+
| 0     1.0         4.0       4.0          4.0               Durability    OEM |
| 1     1.0         4.0       4.0          4.0                    Price    OEM |
| 2     1.0         4.0       4.0          4.0               Durability    OEM |
| 3     1.0         4.0       4.0          4.0               Durability    OEM |
| 4     1.0         4.0       4.0          4.0               Durability    OEM |
| 5     1.0         4.0       4.0          4.0  ManufacturerCredibility    OEM |
| 6     1.0         4.0       4.0          4.0                 Warranty    OEM |
| 7     1.0         4.0       4.0          4.0  ManufacturerCredibility    OEM |
| 8     1.0         4.0       4.0          4.0               Durability    OEM |
| 9     1.0         4.0       4.0          4.0                    Price    OEM |
| 10    1.0         4.0       4.0          4.0                 Warranty    OEM |
| 11    1.0         4.0       4.0          4.0                    Price    OEM |
| 12    1.0         4.0       4.0          4.0                 Warranty    OEM |
| 13    1.0         4.0       4.0          4.0  ManufacturerCredibility    OEM |
+------------------------------------------------------------------------------+

Из таблицы результатов видно, что все строки содержат данные OEM со второго кадра данных.что я тут делаю не так?

1 Ответ

0 голосов
/ 30 мая 2018

Я получаю немного другой вывод из ваших примеров данных, последний и 3.rd строки с конца правильно объединены, также left join не сортирует путем объединения столбцов:

data = pd.merge(survey,rel_attr, left_on = 'Choice', right_on = 'Type',how='left')
print (data)
      ID             CustomerType Choice  ...   Warranty  Manufacture  Type
0    1.0               Durability    OEM  ...        4.0          4.0   OEM
1    2.0                    Price    OEM  ...        4.0          4.0   OEM
2    3.0               Durability    OEM  ...        4.0          4.0   OEM
3    4.0               Durability    OEM  ...        4.0          4.0   OEM
4    5.0               Durability    OEM  ...        4.0          4.0   OEM
5    6.0  ManufacturerCredibility    OEM  ...        4.0          4.0   OEM
6    7.0                 Warranty    OEM  ...        4.0          4.0   OEM
7    8.0  ManufacturerCredibility    OEM  ...        4.0          4.0   OEM
8    9.0               Durability    OEM  ...        4.0          4.0   OEM
9   10.0                    Price    OEM  ...        4.0          4.0   OEM
10  11.0               Durability    TPN  ...        1.0          1.0   TPN
11  12.0                 Warranty    OEM  ...        4.0          4.0   OEM
12  13.0               Durability    TPN  ...        1.0          1.0   TPN

[13 rows x 8 columns]

Если сортировка кажетсяиспользуйте inner join (по умолчанию):

data = pd.merge(survey,rel_attr, left_on = 'Choice', right_on = 'Type')
#same as
#data = pd.merge(survey,rel_attr, left_on = 'Choice', right_on = 'Type',how='inner')
print (data)
      ID             CustomerType Choice  ...   Warranty  Manufacture  Type
0    1.0               Durability    OEM  ...        4.0          4.0   OEM
1    2.0                    Price    OEM  ...        4.0          4.0   OEM
2    3.0               Durability    OEM  ...        4.0          4.0   OEM
3    4.0               Durability    OEM  ...        4.0          4.0   OEM
4    5.0               Durability    OEM  ...        4.0          4.0   OEM
5    6.0  ManufacturerCredibility    OEM  ...        4.0          4.0   OEM
6    7.0                 Warranty    OEM  ...        4.0          4.0   OEM
7    8.0  ManufacturerCredibility    OEM  ...        4.0          4.0   OEM
8    9.0               Durability    OEM  ...        4.0          4.0   OEM
9   10.0                    Price    OEM  ...        4.0          4.0   OEM
10  12.0                 Warranty    OEM  ...        4.0          4.0   OEM
11  11.0               Durability    TPN  ...        1.0          1.0   TPN
12  13.0               Durability    TPN  ...        1.0          1.0   TPN

[13 rows x 8 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...