Объединять кадры данных разной длины, столбец соединения в кадре данных не имеет уникальных значений - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть набор данных Titanic с данными в разных CSV-файлах.Мне нужно объединить все файлы в одном кадре данных, чтобы использовать данные.Но один из файлов не является ни одним столбцом, который обладает уникальными значениями.Я пытаюсь объединить данные с помощью команды слияния, но количество записей увеличивается.

enter code here

Df1

    Ticket  Fare    Cabin   Embarked
0   110152  86.50   B79       S
1   110152  92.50   B77       S
2   110413  79.65   E67       S
3   110413  79.65   E68       S
4   110465  52.00   C110      S
5   110465  52.00   A14       S
6   110564  26.55   C52       S
7   110813  75.25   D37       C
8   111240  33.50   B19       S
9   111320  38.50   E63       S

df2 

        Survived    Ticket
PassengerId     
1         0         A/5 21171
2         1         PC 17599
3         1         STON/O2. 3101282
4         1         113803
5         0         373450
6         0         330877
7         0         17463
8         0         349909
9         1         347742
10        1         237736

Некоторые билеты имеют разные цены на один и тот же номер билета.Который добавляет две записи для того же номера билета для этого пассажира по разной цене.

например.Билет 110152 имеет две цены.какой бы покупатель ни купил этот билет, он имеет две записи после слияния с двумя разными ценами.

 pass
engerID   Survived  Ticket   Fare     Cabin  Embarked
 0    0       110152        86.50      NaN      S
 0    1       110152        90.50      C85      C
 1    1     STON/O2.3101   7.9250      NaN      S
 2    1      113803        53.1000     C123     S
 3    0      113803        53.1000     C123     S
 4    0       373450       8.0500       NaN     S

Здесь пассажир 0 должен вести записи с разными ценами, но после слияния он должен иметь только одну запись.

1 Ответ

0 голосов
/ 25 ноября 2018

Если я правильно понимаю, проблема заключается в нескольких записях, следующих за оператором слияния.

Можно удалить несколько записей для одного и того же номера тикета и сохранить только 1 запись.Примерно так:

In [298]: df1['rank'] = df1.groupby('Ticket')['Fare'].rank('first',ascending=False)

In [299]: df1
Out[299]: 
   Ticket   Fare Cabin Embarked  rank
0  110152  86.50   B79        S   2.0
1  110152  92.50   B77        S   1.0
2  110413  79.65   E67        S   1.0
3  110413  79.65   E68        S   2.0
4  110465  52.00  C110        S   1.0
5  110465  52.00   A14        S   2.0
6  110564  26.55   C52        S   1.0
7  110813  75.25   D37        C   1.0
8  111240  33.50   B19        S   1.0
9  111320  38.50   E63        S   1.0

In [303]: df1 = df1.query('rank == 1.0').drop('rank',1)

In [304]: df1
Out[304]: 

   Ticket   Fare Cabin Embarked
1  110152  92.50   B77        S
2  110413  79.65   E67        S
4  110465  52.00  C110        S
6  110564  26.55   C52        S
7  110813  75.25   D37        C
8  111240  33.50   B19        S
9  111320  38.50   E63        S

Теперь, если видите, df1 имеет только 1 запись на номер билета.Теперь ваше merge утверждение не будет создавать дубликаты.

Дайте мне знать, если это поможет.

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