删除两个数据帧之间不常见的列?

时间:2014-10-01 23:58:49

标签: python pandas dataframe

我有两个数据框,列中有很多列,但两个中都不存在。我想创建一个只有两个数据帧之间共有的列的数据帧。例如:

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)

但我想找到一个更强大的解决方案,我不必手动输入列名。建议?

3 个答案:

答案 0 :(得分: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)]

要使用该列表仅使用这些列获取另一个DataFrame,只选择df1中的列:

df3 = df1[common_cols]

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

  

您可以将列表列表传递到[],以按顺序选择列。   如果DataFrame中不包含列,则会出现异常   提高。

答案 1 :(得分:2)

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

答案 2 :(得分: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: []