【发布时间】:2013-06-01 01:34:17
【问题描述】:
通过对两列进行分组,我做了一些更改。
我使用 python 生成了一个文件,它导致了 2 个重复的列。如何从数据框中删除重复的列?
【问题讨论】:
-
他们有相同的列名吗?
通过对两列进行分组,我做了一些更改。
我使用 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 通常会确保它们具有不同的名称...
【讨论】:
mangle_dup_cols;默认是 TO mangle(例如,产生唯一的 cols),在 0.12 中,这将更改为保留 dups
在处理大型 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)
【讨论】:
我知道这是一个老问题,但我最近遇到了同样的问题,这些解决方案都不适合我,或者循环建议似乎有点矫枉过正。最后,我只是找到了不需要的重复列的索引并删除了该列索引。因此,只要您知道该列的索引,这将起作用(您可能可以通过调试或打印语句找到):
df.drop(df.columns[i], axis=1)
【讨论】:
这里已经回答了python pandas remove duplicate columns。
想法是df.columns.duplicated() 生成布尔向量,其中每个值表示它之前是否看过该列。例如,如果df 具有列["Col1", "Col2", "Col1"],则它会生成[False, False, True]。让我们把它取反,称之为column_selector。
使用上述向量并使用df 的loc 方法有助于选择行和列,我们可以删除重复的列。使用df.loc[:, column_selector],我们可以选择列。
column_selector = ~df.columns().duplicated()
df = df.loc[:, column_selector]
【讨论】: