对 Pandas 列列表中的单词进行排序

Sort Words in Pandas Column list

下面是DF

df = pd.DataFrame({'cd1' : ['PFE1', 'PFE25', np.nan, np.nan], 
                   'cd2' : [np.nan, 'PFE28', 'PFE23', 'PFE14'], 
                   'cd3' : ['PFE15', 'PFE2', 'PFE83', np.nan], 
                   'cd4' : ['PFE25', np.nan, 'PFE39', 'PFE47'], 
                   'cd5' : [np.nan, 'PFE21', 'PFE53', 'PFE15']})
df


cd1   cd2    cd3    cd4     cd5
PFE1  NaN    PFE15  PFE25   NaN
PFE25 PFE28  PFE2   NaN     PFE21
NaN   PFE23  PFE83  PFE39   PFE53
NaN   PFE14  NaN    PFE47   PFE15

我正在尝试执行多项任务(从之前的堆栈问题中获得一些帮助,谢谢!)

合并多个列并删除重复值(不在此示例中)

df['combined'] = df.agg(lambda x: list(x.dropna()), axis=1)
df['Codes'] = list(map(set, df['combined']))

cd1   cd2   cd3   cd4   cd5     combined                       Codes
PFE1  NaN   PFE15 PFE25 NaN     [PFE1, PFE15, PFE25]           {PFE25, PFE1, PFE15}
PFE25 PFE28 PFE2  NaN   PFE21   [PFE25, PFE28, PFE2, PFE21]    {PFE28, PFE21, PFE25, PFE2}
NaN   PFE23 PFE83 PFE39 PFE53   [PFE23, PFE83, PFE39, PFE53]   {PFE83, PFE23, PFE39, PFE53}
NaN   PFE14 NaN   PFE47 PFE15   [PFE14, PFE47, PFE15]          {PFE14, PFE47, PFE15}  

目的是对单词进行排序 下面是预期的输出

Output_col
PFE1,  PFE15, PFE25
PFE2,  PFE21, PFE25, PFE28
PFE23, PFE29, PFE53, PFE83
PFE14, PFE15, PFE47

我尝试在 agg 不起作用后进行排序

df['combined'] = df.agg(lambda x: list(x.dropna()), axis=1).sort_values()

也尝试直接对列进行排序但不起作用

df['combined'] = df['combined'].sort_values()

所以,如果有人有一些线索,感谢您的帮助!

我觉得这就是你想要的?

需要在 lambda 函数中添加排序,以便对列表本身而不是最后的列进行排序

不确定是否有更简洁的方法来避免创建函数,但 list.sort() 函数不会 return 一个新列表,它会修改现有列表

def sort_list(my_list:list)->list:
    temp_list = my_list.copy()
    temp_list.sort()
    return temp_list

df.agg(lambda x: sort_list(list(x.dropna())), axis=1)

输出

0            [PFE1, PFE15, PFE25]
1     [PFE2, PFE21, PFE25, PFE28]
2    [PFE23, PFE39, PFE53, PFE83]
3           [PFE14, PFE15, PFE47]

函数 sort_values() 用于根据“排序依据”列中的记录对 pandas seires/dataframe 进行排序。

如果您需要对作为列中记录的列表中的值进行排序,则必须指定一个迭代记录的函数。

df['combined'] = df['combined'].apply(lambda x: sorted(x))