如何分别删除每列中的所有重复项?

时间:2019-07-30 22:27:30

标签: python pandas duplicates

我在一个数据框中有多个列。

有些重复,有些完全是空的。

我需要删除每列中的重复项。

dict_A = {'Firm_A': ['A', 'A', 'B','C'],'Firm_B': [], 'Firm_C': ['B', 'A', 'B','D'], 'Firm_D': ['C', 'C', 'A','D']}
df = pd.DataFrame.from_dict(dict_A, orient = 'index')
df = df.T
df

  Firm_A Firm_B Firm_C  Firm_D
0   A     None    C       C
1   A     None    A       C
2   B     None    B       A
3   C     None    D       A

所需的输出:

  Firm_A Firm_B Firm_C  Firm_D
0   A     None    C       C
1   B     None    A       A
2   C     None    B       None
3  None   None    D       None

到目前为止,我已经尝试过drop.duplicates()。

我大约有3000列,每列都有大约100个值。

3 个答案:

答案 0 :(得分:0)

这是使用duplicated

的一种方法
df.mask(df.apply(pd.Series.duplicated,0)).apply(lambda x : sorted(x,key=pd.isnull))
Out[542]: 
  Firm_A Firm_B Firm_C Firm_D
0      A   None      C      C
1      B    NaN      A      A
2      C    NaN      B    NaN
3    NaN    NaN      D    NaN

如果您想加快速度,请检查justify

答案 1 :(得分:0)

您正在使用错误的数据结构进行此操作。如果数据帧行中的条目彼此不相关,则df可能不是适用的数据结构。而是将您的字典值去重复:

DictA = {k: list(set(v)) for k, v in DictA.items()}

在那之后,如果碰巧有一些奇怪的数据框列应用程序,则可以从那里构建df。

答案 2 :(得分:0)

使用super().__init__stack转换为df。接下来,对series进行分组,并调用level=1以构造每列唯一值的列表。最后,从unique构造一个新的df并转置

unique