我有两个数据框:
第一个数据帧只是一个列,其中每一行是第二个数据帧中的列名。该数据框仅包含所有列的子集。
我想做的是删除第二个数据框中较小的一列中引用的列。我编写了一个执行此操作的循环,但是我想知道是否有更有效的方法,因为我需要删除大约5,000列。
这是我完成此任务的代码:
for i in to_remove['column_name']:
df = df.drop(i, axis=1)
谢谢!
答案 0 :(得分:1)
看看这个例子:
df = pd.DataFrame({'cols': ['col1', 'col2']})
df2 = pd.DataFrame({'col1': ['a', 'b'],
'col2': ['a', 'b'],
'col3': ['a', 'b'],
'col4': ['a', 'b']})
如此
>>> df
cols
0 col1
1 col2
>>> df2
col1 col2 col3 col4
0 a a a a
1 b b b b
isin
+ ~
您可以使用isin
+一元监督者~
df2.loc[:, ~df2.columns.isin(df.cols)]
col3 col4
0 a a
1 b b
drop
+ axis=1
df2.drop(df.cols, axis=1) # same as df2.drop(columns=df.cols)
col3 col4
0 a a
1 b b
这些命令返回一个新的df
。因此,不要忘记将结果分配回变量(例如df2 = df2.drop(df.cols, axis=1)
)
答案 1 :(得分:0)
我可能会误解您在寻找什么,但是以下方法应该可以工作:
df_new = df.drop(columns=to_remove['column_name'])
答案 2 :(得分:0)
这应该做到:
df.drop(to_remove.column_name, axis=1, inplace=True)