我在一个数据框中有多个列。
有些重复,有些完全是空的。
我需要删除每列中的重复项。
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个值。
答案 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