我想从熊猫数据框的两个不同列中提取值,并将它们放在没有重复值的列表中。
我尝试了以下方法:
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万行,请您帮我找到一种更有效的方法。
答案 0 :(得分:2)
@ALollz提供了正确的答案。我将从那里延伸。要按预期转换成列表,只需使用list(np.unique(df.values))
答案 1 :(得分:1)
您只能使用np.unique(df)
(也许这是最短的版本)。
形式上,np.unique
的第一个参数应该是一个 array_like 对象,
但正如我检查的那样,您还可以只传递 DataFrame 。
当然,如果您只想要简单的 list 而不是 ndarray ,请编写
np.unique(df).tolist()
。
如果您希望列表唯一但按出现的顺序,请输入:
pd.DataFrame(df.values.reshape(-1,1))[0].drop_duplicates().tolist()
操作顺序:
reshape
将源数组更改为单列。0
。[0]
仅接受此列(唯一)。drop_duplicates
确实按照名称中的指示行事。tolist
转换为简单的 list 。