我正在處理一個大型數據集,需要將某些列組合成一個列表。挑戰在于,選擇的列數取決于另一個鍵值,每行都不同。例子:原始數據集:Key Col1 Col2 Col3 Col4 Col5 NonrelatedCols1 a b c d e ...3 r b x d c ...2 k d q l w ...0 w a c s w ...預期結果:Key List NonrelatedCols1 [a] ...3 [r,b,x] ...2 [k,d] ...0 [] ...主要挑戰在于代碼的性能。遍歷行,不是最佳方法,我正在尋找一種更有效的方法。我試圖只選擇目標列,然后使用該agg(list,axis=1)功能。問題是,沒有辦法根據鍵值聚合列。看來,我仍然必須對所有行進行迭代,然后在組合列中刪除過多的值Cols = ['Col1', 'Col2', 'Col3','Col4','Col5']CombinedList = rawData[Cols].agg(list,axis=1)for i in range(rawData.shape[0]): CombinedList[i]=CombinedList[i][:rawData['Key'][i]]總結一下,有沒有辦法簡化代碼,所以我不需要遍歷所有行?
2 回答

尚方寶劍之說
TA貢獻1788條經驗 獲得超4個贊
只考慮重要的列:
Key Col1 Col2 Col3 Col4 Col5
0 1 a b c d e
1 3 r b x d c
2 2 k d q l w
3 0 w a c s w
假設Key總是在第一列,apply該list函數Col對除第一列以外的所有感興趣的列 ( Key),然后根據 中的值對列表進行索引Key:
df.apply(lambda x : list(x[1:])[:x[0]], axis=1)
這需要Key是一個int
如果Key不是int,則使用df = df.astype({'Key': 'int32'})
輸出:
0 [a]
1 [r, b, x]
2 [k, d]
3 []

哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
嘗試:
df.apply(lambda x: x[1:x.Key+1].tolist(), axis=1)
輸出:
0 [a]
1 [r, b, x]
2 [k, d]
3 []
dtype: object
添加回答
舉報
0/150
提交
取消