下面是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()
因此,如果有人有一些線索,感謝您的幫助!
uj5u.com熱心網友回復:
函式 sort_values() 用于根據“排序依據”列中的記錄對 pandas seires/dataframe 進行排序。
如果您需要對作為列中記錄的串列中的值進行排序,則必須指定一個迭代記錄的函式。
df['combined'] = df['combined'].apply(lambda x: sorted(x))
uj5u.com熱心網友回復:
我認為這是在做你想做的事?
需要在 lambda 函式中添加排序,以便對串列本身進行排序,而不是最后的列
不確定是否有更簡潔的方法來避免創建函式,但 list.sort() 函式不會回傳新串列,它會修改現有串列
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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482214.html
