对 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))
下面是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))