通过对两列进行分组,我进行了一些更改。
我使用 python 生成了一个文件,它导致了 2 个重复的列。如何从数据框中删除重复的列?
使用 groupby 可能是最简单的(假设它们也有重复的名称):
In [11]: df
Out[11]:
A B B
0 a 4 4
1 b 4 4
2 c 4 4
In [12]: df.T.groupby(level=0).first().T
Out[12]:
A B
0 a 4
1 b 4
2 c 4
如果它们有不同的名称,您可以drop_duplicates
在转置上:
In [21]: df
Out[21]:
A B C
0 a 4 4
1 b 4 4
2 c 4 4
In [22]: df.T.drop_duplicates().T
Out[22]:
A B
0 a 4
1 b 4
2 c 4
通常read_csv
会确保他们有不同的名字......
使用大型 DataFrame 时,转置是一个坏主意。请参阅此答案以获取内存有效的替代方案:https ://stackoverflow.com/a/32961145/759442
这是迄今为止我发现的最好的。
remove = []
cols = df.columns
for i in range(len(cols)-1):
v = df[cols[i]].values
for j in range(i+1,len(cols)):
if np.array_equal(v,df[cols[j]].values):
remove.append(cols[j])
df.drop(remove, axis=1, inplace=True)
这里已经回答了python pandas remove duplicate columns。想法是df.columns.duplicated()
生成布尔向量,其中每个值表示它之前是否看过该列。例如,如果df
有 columns ["Col1", "Col2", "Col1"]
,那么它会生成[False, False, True]
. 让我们对其进行反转并将其称为column_selector
。
使用上述向量并使用有助于选择行和列的loc
方法,我们可以删除重复的列。我们可以选择列df
。df.loc[:, column_selector]
column_selector = ~df.columns().duplicated()
df = df.loc[:, column_selector]
我知道这是一个老问题,但我最近遇到了同样的问题,这些解决方案都不适合我,或者循环建议似乎有点矫枉过正。最后,我只是找到了不需要的重复列的索引并删除了该列索引。因此,只要您知道该列的索引,这将起作用(您可能可以通过调试或打印语句找到):
df.drop(df.columns[i], axis=1)