使用 Pandas groupby 和 agg 合併資料
前因
想要把下面 dataframe , 分類後合併在一起
order devie abbr
0 first memory m
1 second cpu c
2 third disk d
3 first cpu c
成為下面的 data format
order devie abbr
0 first memory, cpu [m, c]
1 second cpu [c]
2 third disk [d]
先建立兩個 lambda 變數
f1 的功用是將 dataframe 轉換成字串, f2 則將 dataframe 轉換成 list
>>>f1 = lambda x: ", ".join(x.dropna())
>>>f1(data.abbr)
'm, c, d, c'
>>>f2 = lambda x: [z for y in x for z in y]
>>>f2(data.abbr)
['m', 'c', 'd', 'c']
將上述的 lambda 儲存在一個 dict 變數中, 分別對應 dataframe 各個欄位
待會會套用在 agg function 上
>>> d = dict.fromkeys(data.columns.difference(['order', 'abbr']), f1)
>>> d['abbr'] = f2
>>> d
{'devie': <function <lambda> at 0x7fa4b9105400>, 'abbr': <function <lambda> at 0x7fa4a23117b8>}
使用 groupby 和 agg
最後把上述產生的 d 變數, 套用到 agg function 就產生想要的資料了
>>> df = data.groupby('order', as_index=False).agg(d)
>>> df
order devie abbr
0 first memory, cpu [m, c]
1 second cpu [c]
2 third disk [d]