我有一个“长”格式的pandas数据帧,具有以下一般结构:
id,date,color,size,density
1,201201,val1,val2,val3
1,201301,val1,val2,val3
1,201301,val1,val2,val3
2,201201,val1,val2,val3
2,201202,val1,val2,val3
我希望创建的新“宽”格式是:
id,color_1,size_1,density_1,color_2,size_2,density_2,color_3,size_3,density_3
1,val1,val2,val3,val1,val2,val3,val1,val2,val3
2,val1,val2,val3,val1,val2,val3
保留列的原始行顺序,但现在按ID按单行按递增日期顺序排列。当我尝试pd.pivot变体时,它不会保留列顺序。也许是一个简洁的方法?欢迎任何建议。
更新
我已经取得了一些进展,所以这是我的新基础数据框:
id, date, feature_vector (parens for clarity, not in data, comma seperated string field)
1,2012-01-01,(0,1,0,0,0,1)
1,2013-01-01,(0,0,1,0,0,1)
1,2013-01-02,(0,1,0,1,0,1)
2,2012-01-11,(0,1,0,0,1,1)
2,2012-02-11,(0,1,1,0,0,1)
我正在尝试创建以下内容:
id, feature_vector
1,(0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1)
2,(0,1,0,0,1,1,0,1,1,0,0,1)
我现在只想按日期顺序连接特征向量。
答案 0 :(得分:1)
你可以使用concat方法,但我尝试制作你的长数据帧,并发现它甚至在你的玩具示例中也不实用且易碎。我建议使用groupby方法。
grouped = df.sort('date', ascending=True).groupby('id')
如果您需要连接版本,请尝试以下操作:
columns = ['date', 'color', 'size', 'density']
first = grouped.nth(0)
first = first[columns]
first.rename(columns=lambda x: '{}_1'.format(x), inplace=True)
second = grouped.nth(1)
second = second[columns]
second.rename(columns=lambda x: '{}_2'.format(x), inplace=True)
new_df = pd.concat([first, second], axis=1)