我有一個帶有以下欄位的熊貓資料框(df ):
| ID | 姓名 | 類別 |
|---|---|---|
| 01 | 埃迪 | 魔術師 |
| 01 | 埃迪 | 水管工 |
| 02 | 瑪莎 | 演員 |
| 03 | 杰里米 | 舞蹈家 |
| 03 | 杰里米 | 演員 |
我想創建一個資料框(df2),如下所示:
| ID | 姓名 | 類別 |
|---|---|---|
| 01 | 埃迪 | 魔術師,水管工 |
| 02 | 瑪莎 | 演員 |
| 03 | 杰里米 | 舞者,演員 |
因此,首先,我創建 df2 并通過以下命令添加一個附加列:
df2 = df.groupby("id", as_index= False).count()
df2["categories"] = str()
(這也計算了各種類別的出現,這對我打算做的事情很有用)
然后,我使用這個回圈:
for i in df2.itertuples():
for entries in df.itertuples():
if i.id == entries.id:
df2["categories"].iloc[i.Index] = entries.category
else:
pass
使用這段代碼,我得到了我想要的資料框。但是,這種實作有幾個問題:
- 看起來不是最理想的。
- 如果有重復的條目(例如另一列包含“Eddie”和“magician”),則 df2 中 Eddie 的條目將在類別中包含“magician,plumber,magician”。
因此我想問問社區:有沒有更好的方法來做到這一點?
還要記住,這是我在這個網站上的第一個問題!
提前致謝!
uj5u.com熱心網友回復:
您可以按您的id和name列分組并將函式應用于category這樣的列:
import pandas as pd
data = {
'id': ['01', '01', '02', '03', '03'],
'name': ['Eddie', 'Eddie', 'Martha', 'Jeremy', 'Jeremy'],
'category': ['magician', 'plumber', 'actress', 'dancer', 'actor']
}
df = pd.DataFrame(data)
df2 = df.groupby(['id', 'name'])['category'].apply(lambda x: ', '.join(x)).reset_index()
df2
輸出:
id name category
0 01 Eddie magician, plumber
1 02 Martha actress
2 03 Jeremy dancer, actor
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/443064.html
