簡體   English   中英

Pandas dataframe 根據其他列給列表賦值

[英]Pandas dataframe assign value to lists based on other columns

我有一個這樣的 dataframe:

   id  cola colb
0   0   0    [1]
1   1   1    [2,3,4]
2   1   2    [2,3,4]
3   2   3    [3]
4   2   4    [3]
5   2   5    [4]
6   3   6    [5]
...

並希望它轉換為:

   id  cola colb      colc
0   0   0    [1]       
1   1   1    [2,3,4]   0
2   1   2    [2,3,4]   0
3   2   3    [3]       1,2
4   2   4    [3]       1,2
5   2   5    [4]       1,2
6   3   6    [5]       1,2,3,4
...

規則是:

以第一行為例,colb=[1],對應cola=0,則cola=0 追加到id=[1]的colc 單元格列表中。

以第二行為例,colb=[2,3,4],對應cola=1,則將cola=1追加到id=[2,3,4]的colc單元格列表中。

以第三行為例,colb=[2,3,4],對應cola=2,則將cola=2追加到colc中的cell list for id=[2,3,4]。 ...

到目前為止,這是我嘗試過的:

df['colc'] = [[] for _ in range(len(df))]
for i in range(len(df['colb'])):
    lista = df.colb[i]
    for j in lista:
        df.colc.loc[df.id==j].append(pd.Series(df.cola[i])) 

但似乎df.colc.loc[df.id==j]問題,列表中沒有附加任何值。 有沒有辦法做到這一點? 有人能這么好心幫助我嗎? 謝謝!

df = pd.DataFrame({
    'id': [0,1,1,2,2,2,3],
    'cola': [0,1,2,3,4,5,6],
    'colb': [[1], [2,3,4], [2,3,4], [3], [3], [4], [5]],
})

colbid列表的一列, cola是我們用來形成colc的,所以我們可以挑選出那些列,重命名它們,然后分解重命名的id列,這樣所有列表都分解成行。 展開的行之前將共享相同的colc值。

step1 = df[['colb', 'cola']].rename(columns={'colb': 'id', 'cola': 'colc'}).explode('id')

然后我們可以groupby形成不同id的列表

step2 = step1.groupby('id')['colc'].apply(list)

最后將這些列表合並回來

df.merge(step2, on='id', how='left')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM