从所有列中获取唯一值的有效而优雅的方法-大数据

时间:2019-08-07 04:21:22

标签: python python-3.x pandas dataframe unique

我有一个包含600列以上的数据框。我给了一个示例数据框,这里有几列

df_new = pd.DataFrame({'person_id' :[1,2,3],'obs_date':['12/31/2007','11/25/2009',np.nan],
   'hero_id':[2,4,np.nan],'date2':['12/31/2017',np.nan,'10/06/2015'],
   'heroine_id':[1,np.nan,5],'date3':['12/31/2027','11/25/2029',np.nan],
   'bud_source_value':[1250000,250000,np.nan],
   'prod__source_value':[10000,20000,np.nan]})

我想从每一列中获取唯一值并将其输出到另一个数据帧中

这是我尝试过的两种方法

cols = df_new.columns.tolist()
unique_list = dict()
for c in cols:  #appraoch 1
    unique_list[c] = df_new[c].unique()

for c in cols:   #approach 2
    unique_list[c] = df_new[c].drop_duplicates()

总有没有一步一步做到这一点的吗?请注意,我希望每个列的值都是唯一的,而数据框中的行不是唯一的

由于我的数据超过一百万条记录,并且列数超过600,因此任何改进的建议/解决方案都会有所帮助

2 个答案:

答案 0 :(得分:1)

将数据帧转换为numpy数组并执行以下操作

df_new =  np.array(df_new)
unique_list = np.unique(df_new,axis=1)

脾气暴躁!

答案 1 :(得分:1)

您可以尝试:

print({k:v.drop_duplicates().tolist() for k,v in df_new.items()})

输出:

{'bud_source_value': [1250000.0, 250000.0, nan], 'date2': ['12/31/2017', nan, '10/06/2015'], 'date3': ['12/31/2027', '11/25/2029', nan], 'hero_id': [2.0, 4.0, nan], 'heroine_id': [1.0, nan, 5.0], 'obs_date': ['12/31/2007', '11/25/2009', nan], 'person_id': [1, 2, 3], 'prod__source_value': [10000.0, 20000.0, nan]}