我想从pandas数据帧的两个不同列中提取值,将它们放在没有重复值的列表中。
我尝试过以下方法:
arr = df[['column1', 'column2']].values
thelist= []
for ix, iy in np.ndindex(arr.shape):
if arr[ix, iy] not in thelist:
thelist.append(edges[ix, iy])
这可行,但需要太长时间。数据框包含大约3000万行。
例:
column1 column2
1 adr1 adr2
2 adr1 adr2
3 adr3 adr4
4 adr4 adr5
应该使用以下值生成列表:
[adr1, adr2, adr3, adr4, adr5]
考虑到数据帧包含3000万行,你能帮我找到一种更有效的方法吗?
@ALollz给出了正确答案。我会从那里延伸出来。要按预期转换为列表,只需使用list(np.unique(df.values))
你可以使用np.unique(df)
(也许这是最短的版本)。
形式上,np.unique
的第一个参数应该是一个array_like对象,但是在我检查时,你也可以传递一个DataFrame。
当然,如果你只想简单列表而不是ndarray,请写np.unique(df).tolist()
。
如果您希望列表唯一但按外观顺序,请写入:
pd.DataFrame(df.values.reshape(-1,1))[0].drop_duplicates().tolist()
操作顺序:
reshape
将源数组更改为单个列。0
。[0]
就是这个(唯一的)专栏。drop_duplicates
的行为与名称完全相同。tolist
转换为普通列表。