![](/img/trans.png)
[英]Assign value to a column based of other columns from the same 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]],
})
colb
是id
列表的一列, 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.