[英]Pandas pivot/merge multiple columns into single, using column headers as values
[英]Pandas: Pivot column to headers
我正在嘗試將列中的值轉換為列標題,但保留其余數據。 這是我的完整代碼,以及最接近我正在尋找的內容。 唯一的問題是我無法弄清楚如何保留end
列:
import pandas as pd
starts = pd.date_range(start = '1/1/2017', freq = '31d', periods = 4).tolist()
ends = pd.date_range(start = '1/31/2017', freq = '31d', periods = 4).tolist()
df = pd.DataFrame({ 'id':['XXX','XXX','XXX','XXX','YYY','YYY','YYY','YYY'],
'start': starts + starts,
'end': ends + ends,
'type':['car','car','car','car','truck','truck','truck','truck']
}, columns = ['id','start','end','type'])
原始數據幀:
id start end type
0 XXX 2017-01-01 2017-01-31 car
1 XXX 2017-02-01 2017-03-03 car
2 XXX 2017-03-04 2017-04-03 car
3 XXX 2017-04-04 2017-05-04 car
4 YYY 2017-01-01 2017-01-31 truck
5 YYY 2017-02-01 2017-03-03 truck
6 YYY 2017-03-04 2017-04-03 truck
7 YYY 2017-04-04 2017-05-04 truck
我最近的樞軸嘗試:
print df.pivot(index = 'start', columns = 'id', values = 'type').reset_index()
當前輸出:
id start XXX YYY
0 2017-01-01 car truck
1 2017-02-01 car truck
2 2017-03-04 car truck
3 2017-04-04 car truck
期望的輸出:
start end XXX YYY
0 2017-01-01 2017-01-31 car truck
1 2017-02-01 2017-03-03 car truck
2 2017-03-04 2017-04-03 car truck
3 2017-04-04 2017-05-04 car truck
任何幫助,將不勝感激。
pd.pivot_table(df,index=['start','end'],columns='id',values='type',aggfunc='sum').reset_index()
Out[1587]:
id start end XXX YYY
0 2017-01-01 2017-01-31 car truck
1 2017-02-01 2017-03-03 car truck
2 2017-03-04 2017-04-03 car truck
3 2017-04-04 2017-05-04 car truck
使用set_index和unstack,
df.set_index(['start', 'end', 'id']).type.unstack().reset_index()
id start end XXX YYY
0 2017-01-01 2017-01-31 car truck
1 2017-02-01 2017-03-03 car truck
2 2017-03-04 2017-04-03 car truck
3 2017-04-04 2017-05-04 car truck
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.