![](/img/trans.png)
[英]compare column values of dataframes with non-unique indices of different length
[英]Merge different length dataframes, Join column in dataframe dont have unique values
我有泰坦尼克號數據集,其中數據包含在不同的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必須以不同的價格記錄,但合並后應該只有一個記錄。
如果我理解正確,那么問題在於合並語句之后有多個記錄。
您可以消除同一票證號的多個記錄,並僅保留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
語句將不會產生重復項。
讓我知道是否有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.