我有泰坦尼克号数据集,数据包含在不同的csv文件中。我需要将所有文件合并到一个数据框中以使用数据。但是文件之一不是拥有唯一值的任何列。我正在尝试使用merge命令合并数据,但是记录数却增加了。
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必须以不同的价格记录,但合并后应该只有一个记录。
答案 0 :(得分:1)
如果我理解正确,那么问题在于合并语句之后有多个记录。
您可以清除同一票证号的多个记录,并仅保留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
语句将不会产生重复。
让我知道这是否有帮助。