通过对两列进行分组,我做了一些更改。
我使用python生成了一个文件,导致了2个重复的列。如何从数据框中删除重复的列?
答案 0 :(得分:18)
使用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
通常会确保它们有不同的名称......
答案 1 :(得分:2)
使用大型DataFrame时,转置是一个坏主意。有关内存效率的替代方法,请参阅此答案:https://stackoverflow.com/a/32961145/759442
答案 2 :(得分:0)
这是我迄今为止找到的最好的。
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)
答案 3 :(得分:0)
我知道这是一个老问题,但我最近遇到了同样的问题,这些解决方案都没有对我有用,或者循环建议似乎有点矫枉过正。最后,我只是找到了不需要的重复列的索引并删除了该列索引。所以,只要您知道这将起作用的列的索引(您可以通过调试或打印语句找到它):
df.drop(df.columns[i], axis=1)
答案 4 :(得分:0)
这里python pandas remove duplicate columns已经回答了。
想法是df.columns.duplicated()
生成布尔向量,其中每个值表示它是否曾经查看过该列。例如,如果df
具有列["Col1", "Col2", "Col1"]
,则它将生成[False, False, True]
。让我们对其进行倒置并将其称为column_selector
。
使用上述向量,并使用loc
的{{1}}方法(该方法有助于选择行和列),我们可以删除重复的列。使用df
,我们可以选择列。
df.loc[:, column_selector]