2017-04-09 102 views
2

我想修剪從我的數據幀的一些數據,但只在有在「爲了國家」一欄中重複的行從熊貓列刪除數據

我的數據幀是這樣的:

Year From country To country Points 
0 2016  Albania Armenia  0 
1 2016  Albania Armenia  2 
2 2016  Albania Australia  12 
     Year From country  To country Points 
2129 2016 United Kingdom The Netherlands  0 
2130 2016 United Kingdom   Ukraine  10 
2131 2016 United Kingdom   Ukraine  5 

[2132 rows x 4 columns] 

我試穿一下吧:

df.drop_duplicates(subset='To country', inplace=True) 

會發生什麼,是這樣的:

Year From country To country Points 
0 2016  Albania Armenia  0 
2 2016  Albania Australia  12 
4 2016  Albania Austria  0 
    Year From country  To country Points 
46 2016  Albania The Netherlands  0 
48 2016  Albania   Ukraine  0 
50 2016  Albania United Kingdom  5 

[50 rows x 4 columns] 

雖然這確實消除了重複的「To country」條目,但它也刪除了「From country」列的所有值。我必須使用drop_duplicates()錯誤,但熊貓文檔並沒有幫助我理解爲什麼它的下降比我預期的要多?

回答

3

不,這種行爲是正確的 - 假設每個團隊都扮演其他團隊,它會找到第一個,而所有這些第一個都是「來自」阿爾巴尼亞。

從你已經低於說,你要保持0行,但不爲行1,因爲它重複ToFrom國家。消除這些方式是:

df.drop_duplicates(subset=['To country', 'From country'], inplace=True) 
+0

哦。我現在明白,它在做什麼,但我不知道如何讓它做我想做的事。我想要的是刪除每個國家的重複;即: 年因國家點數 0 2016阿爾巴尼亞亞美尼亞0 2 2016阿爾巴尼亞澳大利亞從全國12個 今年國家點數 2129 2016英國,荷蘭0 2130 2016英國烏克蘭10 類似的東西,我希望可以在評論中閱讀 –

+0

每對*國家的重複?例如,「(阿爾巴尼亞,亞美尼亞)」只發生過一次?或者在列之間重複?如同,你不希望亞美尼亞既是'To'也是From''? –

+0

是的,我仍然希望從國家/地區專欄獲得所有國家/地區,但只刪除「來自國家/地區」列中的「To countries」專欄中的重複值 –

1

最簡單的解決方案是一羣以「對國家的名字,並採取第一(或最後,如果你喜歡)一行從各組:

df.groupby('To country').first().reset_index() 
#  To country Year From country Points 
#0   Armenia 2016   Albania  0 
#1  Australia 2016   Albania  12 
#2 The Netherlands 2016 United Kingdom  0 
#3   Ukraine 2016 United Kingdom  10 

與aryamccarthy的解決方案相比,這一項可以讓您更好地控制要保留的重複項。

+0

雖然我覺得目的不太清楚,但我認爲這是對這些工具的創造性使用。事實上,如果需要,它的確可以提供更多的控 –