我有這個資料框
df=
ID join Chapter ParaIndex text
0 NaN 1 0 I am test
1 NaN 2 1 it is easy
2 1 3 2 but not so
3 1 3 3 much easy
我想得到這個
(將“text”列與“join”列中的相同索引合并并重新索引“ID”和“ParaIndex”,其余不變)
dfEdited=
ID join Chapter ParaIndex text
0 NaN 1 0 I am test
1 NaN 2 1 it is easy
2 1 3 2 but not so much easy
我用過這個命令
dfedited=df.groupby(['join'])['text'].apply(lambda x: ' '.join(x.astype(str))).reset_index()
它只合并列連接中帶有數字索引的行,并排除帶有非索引的行
所以我改成了這個
dfedited=df.groupby(['join'],dropna=False)['text'].apply(lambda x: ' '.join(x.astype(str))).reset_index()
這里它基于索引連接合并所有行,但它認為索引為 NaN 的行作為一個組,因此將它們連接成組!但是,我不想加入他們……知道嗎?非常感謝
我也用過這個
dfedited=df.groupby(['join', "ParaIndex", "Chapter"],dropna=False )['text'].apply(lambda x: ' '.join(x.astype(str) )).reset_index()
它看起來更好,因為它包含所有列,但沒有變化!!
uj5u.com熱心網友回復:
希望你能給出一個資料和代碼的例子。一步一步來,而不是只在一行中撰寫代碼而不進行測驗。這個單行代碼很難幫你。
但主要思想是使用 merge(..., on='join')
uj5u.com熱心網友回復:
我是這樣解決的;
dfEdited = df.assign(key=df['join'].ne(df['join'].shift()).cumsum()).groupby('key').agg({ "ParaIndex": 'first', "Chapter":'first','text':' '.join}).reset_index()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386232.html
