Python Pandas-将csv文件转换为特定格式

时间:2018-06-21 05:57:06

标签: python database python-2.7 pandas

这是我第一次尝试使用熊猫。我真的需要与数据透视表相关的帮助。我以前使用的所有组合似乎都不起作用。

我有一个这样的csv文件:

Id  Param1          Param2
1   -5.00138282776  2.04990620034E-08
1   -4.80147838593  2.01516989762E-08
1   -4.60159301758  1.98263165885E-08
1   -4.40133094788  1.94918392538E-08
1   -4.20143127441  1.91767686175E-08
1   -4.00122880936  1.88457374151E-08

2   -5.00141859055  6.88369405921E-09
2   -4.80152130127  6.77335965094E-09
2   -4.60163593292  6.65415056389E-09
2   -4.40139055252  6.54434062497E-09

3   -5.00138044357  1.16316911658E-08
3   -4.80148792267  1.15515588206E-08
3   -4.60160970688  1.14048361866E-08
3   -4.40137386322  1.12357021465E-08
3   -4.20145988464  1.11049178741E-08

我希望我的最终输出像这样:

Param1_for_Id1  Param2_for_Id1     Param1_for_Id2   Param2_for_Id2      Param1_for_Id3  Param2_for_Id3
-5.00138282776  2.04990620034E-08  -5.00141859055   6.88369405921E-09  -5.00138044357  1.16316911658E-08
-4.80147838593  2.01516989762E-08  -4.80152130127   6.77335965094E-09  -4.80148792267  1.15515588206E-08
-4.60159301758  1.98263165885E-08  -4.60163593292   6.65415056389E-09  -4.60160970688  1.14048361866E-08
-4.40133094788  1.94918392538E-08  -4.40139055252   6.54434062497E-09  -4.40137386322  1.12357021465E-08
-4.20143127441  1.91767686175E-08                                      -4.20145988464  1.11049178741E-08  
-4.00122880936  1.88457374151E-08 

我不知道如何重塑数据。任何帮助将是最欢迎的!

1 个答案:

答案 0 :(得分:1)

使用set_index X2 + unstack

v = (df.set_index('Id')  # optional, omit if `Id` is the index
       .set_index(df.groupby('Id').cumcount(), append=True)
       .unstack(0)
       .sort_index(level=1, axis=1)
       .fillna('')       # I actually don't recommend adding this step in
)
v.columns = v.columns.map('{0[0]}_for_Id{0[1]}'.format)

现在,

print(v)

   Param1_for_Id1  Param2_for_Id1 Param1_for_Id2 Param2_for_Id2  \
0       -5.001383    2.049906e-08       -5.00142    6.88369e-09   
1       -4.801478    2.015170e-08       -4.80152    6.77336e-09   
2       -4.601593    1.982632e-08       -4.60164    6.65415e-09   
3       -4.401331    1.949184e-08       -4.40139    6.54434e-09   
4       -4.201431    1.917677e-08                                 
5       -4.001229    1.884574e-08                                 

  Param1_for_Id3 Param2_for_Id3  
0       -5.00138    1.16317e-08  
1       -4.80149    1.15516e-08  
2       -4.60161    1.14048e-08  
3       -4.40137    1.12357e-08  
4       -4.20146    1.11049e-08  
5                                

请注意,最后一个fillna步骤会导致字符串和数字数据混合在一起,因此,如果您要使用此输出做更多的操作,建议不要添加该步骤。