iT邦幫忙

1

python pandas資料轉置問題

  • 分享至 

  • xImage

原始資料:
ID. 項目
0101 abc
0101 egg
0101 ggg
0102 uuu
0102 oooo

想呈現方式變成:

ID 項目1 項目2 項目3
0101 abc egg ggg
0102 uuu oooo

試了怎麼轉也轉不出想呈現的結果

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
mackuo
iT邦研究生 1 級 ‧ 2022-11-30 09:53:10
最佳解答
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
https://ithelp.ithome.com.tw/upload/images/20221130/20122335VEYia55iya.jpg

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

https://ithelp.ithome.com.tw/upload/images/20221130/201223355NMQZqLB6P.jpg

0
froce
iT邦大師 1 級 ‧ 2022-11-30 10:51:46

因為資料懶的編輯,所以用官網範例,自己改成自己的資料。

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))

我要發表回答

立即登入回答