将CSV从宽格式转换为长格式

时间:2017-08-23 06:09:35

标签: python pandas csv dataframe

我有这样的csv:

col1,col2,col2_val,col3,col3_val
A,1,3,5,6
B,2,3,4,5

我希望像这样转移这个csv:

col1,col6,col7,col8
A,Col2,1,3
A,col3,5,6

有col3和col3_val所以我想保留col6中的col3和col7中col3的值以及col3中col3值存储的col8中col3_val' s值。

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找的是df.meltdf.groupby

In [63]: df.rename(columns=lambda x: x.strip('_val')).melt('col1')\
           .groupby(['col1', 'variable'], as_index=False)['value'].apply(lambda x: pd.Series(x.values))\
           .add_prefix('value')\
           .reset_index()
Out[63]: 
  col1 variable  value0  value1
0    A     col2       1       3
1    A     col3       5       6
2    B     col2       2       3
3    B     col3       4       5

感谢John Galt寻求第二部分的帮助。

如果您想重命名列,请将上面的整个表达式分配给df_out,然后执行:

df_out.columns = ['col1', 'col6', 'col7', 'col8']

使用df.to_csv保存此内容应该很简单。