繁体   English   中英

熊猫 - 如何正确转置列

[英]Pandas - how to transpose columns correctly

我有这样的数据帧:

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

有任何想法吗?

你可以使用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

试试@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM