我有一個練習,如果三列中有相同的資料,我需要將幾行或幾行變成一行。
substances = pd.DataFrame({'id': ['id_1', 'id_1', 'id_1', 'id_2', 'id_3'],
'part': ['1', '1', '2', '2', '3'],
'sub': ['paracetamolum', 'paracetamolum', 'ibuprofenum', 'dienogestum', 'etynyloestradiol'],
'strength': ['150', '50', '50', '20', '30'],
'unit' : ['mg', 'mg', 'mg', 'mg', 'mcg'],
'other irrelevant columns for this task' : ['sth1' , 'sth2', 'sth3', 'sth4', 'sth5']
})
現在假設id、part和substance是相同的,我應該把它排成一行,所以最終結果是:
| ID | 部分 | 力量 | 物質 | 單元 |
|---|---|---|---|---|
| id_1 | 1 | '150 # 50' | 撲熱息痛 | 毫克 |
| id_1 | 2 | 50 | 布洛芬 | 毫克 |
| id_2 | 2 | 20 | 地諾孕酮 | 毫克 |
| id_3 | 3 | 30 | 炔雌醇 | 微克 |
我遇到的問題是,我將這些行合并為一行以顯示可能的強度,例如“150 # 50”,我曾嘗試過這樣的操作,但效果不佳:
substances = substances.groupby('id', 'part', 'sub', 'strength').id.apply(lambda x: str(substances['strength']) ' # ' str(next(substances['strength'])))
uj5u.com熱心網友回復:
df = df.groupby(['id','part','sub','unit']).agg({'strength':' # '.join}).reset_index()
df = df[['id','part','strength', 'sub','unit']]
print(df)
輸出:
id part strength sub unit
0 id_1 1 150 # 50 paracetamolum mg
1 id_1 2 50 ibuprofenum mg
2 id_2 2 20 dienogestum mg
3 id_3 3 30 etynyloestradiol mcg
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/372453.html
