Python 如何合并每个都是字符串列表的行。。不包括重复项
我正在处理音乐数据,需要为回归算法Python3编码流派分类。我想编码的类别为0或1,如果一个流派分类。数据位于数据框中,包含重复的值。我想将所有行合并到一个唯一值列表中,然后使用get_dummies对每个记录进行编码 第一次尝试:Python 如何合并每个都是字符串列表的行。。不包括重复项,python,list,join,merge,encode,Python,List,Join,Merge,Encode,我正在处理音乐数据,需要为回归算法Python3编码流派分类。我想编码的类别为0或1,如果一个流派分类。数据位于数据框中,包含重复的值。我想将所有行合并到一个唯一值列表中,然后使用get_dummies对每个记录进行编码 第一次尝试: for i in x: a = genres + list(i) genres.append(a) 第二次尝试: x = list of genres (like below) [j for i in x for j in i] list(it
for i in x:
a = genres + list(i)
genres.append(a)
第二次尝试:
x = list of genres (like below)
[j for i in x for j in i]
list(itertools.chain(x))
输入:
第1行=[“嘻哈”、“摇滚”、“流行摇滚”、“乡村”]
第2行=[“流行”、“摇滚”、“流行摇滚”、“另类摇滚”]
预期产出:
new list = ['hip hop', 'rock','country','pop','pop rock','alternative rock']
最终产量
| hip hop | rock | country | pop | pop rock | alternative rock |
row 1 | 1 | 1 | 1 | 0 | 1 | 0 |
row 2 | 0 | 1 | 0 | 1 | 1 | 1 |
如果元素的顺序不重要,则可以将每个列表视为查找列表,然后将其转换回列表:
def merge(r1, r2):
return list(set().union(r1, r2))
row_1 = ['hip hop', 'rock','pop rock','country']
row_2 = ['pop', 'rock', 'pop rock' ,'alternative rock']
print(merge(row_1, row_2))
输出
但是,如果外观顺序确实重要,则可以执行以下操作:
from itertools import chain
def merge_with_order(r1, r2):
seen = set()
result = []
for e in chain(r1, r2):
if e not in seen:
seen.add(e)
result.append(e)
return result
row_1 = ['hip hop', 'rock','pop rock','country']
row_2 = ['pop', 'rock', 'pop rock' ,'alternative rock']
print(merge_with_order(row_1, row_2))
输出
如果你喜欢一个班轮考虑使用:
谢谢你的回复。这很有帮助。我需要对数据框中的行列表执行此操作。
from itertools import chain
def merge_with_order(r1, r2):
seen = set()
result = []
for e in chain(r1, r2):
if e not in seen:
seen.add(e)
result.append(e)
return result
row_1 = ['hip hop', 'rock','pop rock','country']
row_2 = ['pop', 'rock', 'pop rock' ,'alternative rock']
print(merge_with_order(row_1, row_2))
['hip hop', 'rock', 'pop rock', 'country', 'pop', 'alternative rock']
from itertools import chain
from collections import OrderedDict
def merge_with_order(r1, r2):
return list(OrderedDict.fromkeys(chain(r1, r2)))