原始資料:
ID. 項目
0101 abc
0101 egg
0101 ggg
0102 uuu
0102 oooo
想呈現方式變成:
ID 項目1 項目2 項目3
0101 abc egg ggg
0102 uuu oooo
試了怎麼轉也轉不出想呈現的結果
import pandas as pd
df = pd.read_clipboard()
df
cilpboard資料如下:
ID. 項目
0 101 abc
1 101 egg
2 101 ggg
3 102 uuu
4 102 oooo
res = pd.DataFrame()
for i in df['ID.'].unique():
# 先將每一個ID項目篩選出來後轉置,再轉成list
tempitems = (df[df['ID.']==i].T.loc['項目'].tolist())
# 創建欄位名稱
tempcols = [('項目')+str(x) for x in range(1, len(tempitems)+1)]
# 將上面2項資料轉成dict
tempdict = {tempcols[x] :tempitems[x] for x in range(len(tempitems))}
# 將dict做成df
tempdf = pd.DataFrame(tempdict, index=[0])
# 把ID插入到第1欄
tempdf.insert(loc=0, column='ID', value=i)
# 將迴圈內的資料串接起來
res = pd.concat([res, tempdf]).reset_index(drop=True)
res
因為資料懶的編輯,所以用官網範例,自己改成自己的資料。
import pandas as pd
df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
'Parrot', 'Parrot', 'Parrot'],
'Max Speed': [380., 370., 24., 26., 28.]})
groups = df.groupby(['Animal'])
result = []
for g in groups.groups:
tempdf = groups.get_group(g)
temp = pd.concat([pd.Series([g]), tempdf['Max Speed']])
columns = ['Animal'] + [f'Max Speed {i}' for i in range(1, len(tempdf['Max Speed'])+1)]
tempdf = pd.DataFrame(temp).T
tempdf.columns = columns
result.append(tempdf)
print(pd.concat(result))