2014-10-01 89 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: [] 
相关问题