2014-10-01 85 views
0

我有兩列數據框在列中有許多列,但有一些在兩者中都不存在。我想創建一個只有兩個數據框之間通用的列的數據框。因此,例如:刪除兩個數據框之間不常見的列?

list(df1) 
['Survived', 'Age', 'Title_Mr', 'Title_Mrs', 'Title_Captain'] 
list(df2) 
['Survived', 'Age', 'Title_Mr', 'Title_Mrs', 'Title_Countess'] 

而且我喜歡去:

['Survived', 'Age', 'Title_Mr', 'Title_Mrs'] 

由於Title_MrTitle_Mrs在兩種df1df2。我已經想通了如何通過列名像這樣手動輸入做到這一點:

df1 = df1.drop(['Title_Captain'], axis=1) 

但我想找到一個更強大的解決方案,我不必手動輸入列名。建議?

+1

不能使用套和十字路口?例如,對於例如 >>> l1 = ['Survived','Age','Title_Mr','Title_Mrs','Title_Captain'] >>> l2 = ['Survived','Age','Title_Mr', 'Title_Mrs', 'Title_Countess'] >>>列表(集(L1).intersection(集(L2))) [ 'Title_Mr', '年齡', 'Title_Mrs', '倖存'] ' – linuxfan 2014-10-02 00:01:27

+0

坦白我不確定。只是澄清 - 我正在處理數據框而不是列表,我只是打印數據框中的列以顯示列出現的列。這會改變什麼嗎?您可以使用'df1 [df1.isin(df2)]' – 2014-10-02 00:06:26

+0

@ ) – linuxfan 2014-10-02 00:23:25

回答

2

使用@linuxfan和@PadraicCunningham的意見,我們可以得到公共列的列表:

common_cols = list(set(df1.columns).intersection(df2.columns)) 

編輯:@AdamHughes'的回答讓我考慮保留列的順序。如果這是很重要的,你可以這樣做,而不是:

common_cols = [col for col in set(df1.columns).intersection(df2.columns)] 

得到另一個數據框只有那些您使用的列表,以便從df1只選擇那些列列:

df3 = df1[common_cols] 

根據http://pandas.pydata.org/pandas-docs/stable/indexing.html

您可以將列的列表傳遞給[]以按照該順序選擇列。 如果DataFrame中不包含列,則會引發 異常。

2

df1 = df1.drop([col for col in df1.columns if col in df1.columns and col in df2.columns], axis=1)

+0

+1比我的方法更直接,並保留列順序 – bernie 2014-10-02 00:28:49

+0

謝謝。感謝upvote,因爲我終於有足夠的代表評論線程! – 2014-10-02 00:33:58

+0

不客氣。哦,我只注意到有一個小的語法錯誤。列表理解應該改爲:'[col for df1.columns col in df1.columns and col in df2。列]' – bernie 2014-10-02 00:36:27

1

你不一定需要刪除列,只選擇感興趣的列:

In [204]: 

df1 = pd.DataFrame(columns=['Survived', 'Age', 'Title_Mr', 'Title_Mrs', 'Title_Captain']) 
df2 = pd.DataFrame(columns=['Survived', 'Age', 'Title_Mr', 'Title_Mrs', 'Title_Countess']) 
# create a list of the common columns using set and intersection 
common_cols=list(set.intersection(set(df1), set(df2))) 
# use this list to perform column selection 
df1[common_cols] 
['Title_Mr', 'Age', 'Survived', 'Title_Mrs'] 
Out[204]: 
Empty DataFrame 
Columns: [Title_Mr, Age, Survived, Title_Mrs] 
Index: [] 
相關問題