亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于列值的高效逐行操作(聚合)

基于列值的高效逐行操作(聚合)

眼眸繁星 2022-05-24 12:57:05
我正在處理一個大型數據集,需要將某些列組合成一個列表。挑戰在于,選擇的列數取決于另一個鍵值,每行都不同。例子:原始數據集: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           []


查看完整回答
反對 回復 2022-05-24
?
哆啦的時光機

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


查看完整回答
反對 回復 2022-05-24
  • 2 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號