我有一个这样的数据框:
name_by_day name a b
-------------------------------
20170901 2017090101 118 241
20170901 2017090102 117 241
20170901 2017090103 88 241
20170901 2017090104 99 241
20170901 2017090105 87 241
我只想要以下内容:
name_by_day a_x b_x a_y b_y a_z b_z ...
---------------------------------------------------
20170901 118 241 117 241 88 241 99 241 87 241
有什么想法吗?
答案 0 :(得分:1)
您可以使用stack
,然后使用cumcount
创建可以代表您的x,y,z的唯一键。
s=df.set_index('name_by_day')[['a','b']].stack().to_frame('Value')
s['New']=s.groupby(level=[0,1]).cumcount().astype(str)
s=s.set_index(s['New'],append=True).Value.unstack([1,2])
s.columns=s.columns.map('{0[0]}_{0[1]}'.format)
s
Out[1077]:
a_0 b_0 a_1 b_1 a_2 b_2 a_3 b_3 a_4 b_4
name_by_day
20170901 118 241 117 241 88 241 99 241 87 241
答案 1 :(得分:1)
试试@Wen解决方案:
import string
df_out = df.set_index(df.groupby('dname_by_day').cumcount()[::-1]\
.map(lambda x: string.ascii_lowercase[-(x+1)]))
df_out = df_out.set_index('dname_by_day', append=True)[['a','b']].unstack(0)\
.sort_index(level=1, axis=1)
df_out.columns = df_out.columns.map('_'.join)
df_out = df_out.reset_index()
df_out
输出:
dname_by_day a_v b_v a_w b_w a_x b_x a_y b_y a_z b_z
0 20170901 118 241 117 241 88 241 99 241 87 241