Python 正在寻找加速以下代码的方法

Python 正在寻找加速以下代码的方法,python,pandas,Python,Pandas,我的数据集中有三列,其中包含存储为字符串的元素列表。我想得到元素,它是所有这些列表的公共部分 要记住的一些事情: 1) 列可以包含“NAN”值,而不是列表 2) 如果有多个公共元素,那么选择哪一个并不重要 我编写了以下函数,它将包含这三个相关列的数据框作为参数: def parse_类型(df): def get_类型(行): 行列表=[] 对于行中的元素: 如果元素!='楠: y=ast.literal\u eval(元素) 对于y类型: 如果流派不在行列表中: 行列表+=类型 唯一=设置(行

我的数据集中有三列,其中包含存储为字符串的元素列表。我想得到元素,它是所有这些列表的公共部分

要记住的一些事情: 1) 列可以包含“NAN”值,而不是列表 2) 如果有多个公共元素,那么选择哪一个并不重要

我编写了以下函数,它将包含这三个相关列的数据框作为参数:

def parse_类型(df):
def get_类型(行):
行列表=[]
对于行中的元素:
如果元素!='楠:
y=ast.literal\u eval(元素)
对于y类型:
如果流派不在行列表中:
行列表+=类型
唯一=设置(行列表)
返回列表(唯一)[0]
结果=df.apply(获取类型)
返回结果
输入:

index   col1                  col2                                    col3
0       NAN                   NAN                                     NAN
1       ['hip hop', 'trap']   ['indie', 'trap']                       NAN
2       ['pop', 'viral pop']  ['dance pop', 'pop', 'post-teen pop']   NAN
预期产出:

index   col
0       NAN
1       'trap'
2       'pop'

我们做了一些优化。看看这是否有帮助

import pandas as pd
import numpy as np

data = {
    'col1': [np.nan,['hip hop', 'trap'],['pop', 'viral pop','post-teen pop']],
    'col2': [np.nan,['indie', 'trap'],['dance pop', 'pop', 'post-teen pop']],
    'col3': [np.nan,np.nan,np.nan]
}

df = pd.DataFrame(data)
result_df = pd.DataFrame(columns=['common_words'])
for idx, rows in enumerate(df.iterrows()):
    new_set = None
    valid_set_found = False
    for i in range(len(rows[1])):
        if isinstance(rows[1][i], list):
            if valid_set_found is False:
                new_set = set(rows[1][i])
                valid_set_found = True
                continue
            new_set = set(rows[1][i]) & new_set

    if new_set is None:
        result_df.loc[idx] = np.nan
    else:
        new_list = list(new_set)
        result_df.loc[idx] = [new_list]

print(df)
print(result_df)

Input :
                              col1                             col2  col3
0                              NaN                              NaN   NaN
1                  [hip hop, trap]                    [indie, trap]   NaN
2  [pop, viral pop, post-teen pop]  [dance pop, pop, post-teen pop]   NaN
Output : 
           common_words
0                   NaN
1                [trap]
2  [pop, post-teen pop]

添加一组示例输入和预期输出将有所帮助。如果使用
如果流派不在行列表中
,则创建具有唯一值的列表,而不需要
set()
。或者将所有字符串转换为列表,然后将所有列表转换为集合,并执行
set1&set2&set3
以获得唯一值。