根据熊猫中的列值将多行合并为一行

时间:2020-06-14 18:15:33

标签: python pandas

我正在尝试解析几乎完成的csv文件,但停留在一点。 我要将行与上一行合并,其中上一行的第1列不应为空。我有这样的数据格式。

C1       C2          C3       C4      C5 

1001    1S30       5:00:00    MP      GL
NaN     1M94       9:06:00    GL      MP
1101    1P1        6:35:00    MP      Vic
NaN     9E06       07:02:00   Vic     N
NaN     9M08       10:02:00   N       Liv
NaN     9E13       13:26:00  Liv      Vic
NaN     1P26       4:40:00   Vic      MP

我要合并以下指定格式的行

enter image description here

我被困是因为

在此提供任何帮助。

1 个答案:

答案 0 :(得分:0)

更新:

df.groupby(df['C1'].ffill()).apply(lambda x: x.stack().reset_index())[0].unstack().reset_index()

输出:

       C1     0     1        2   3    4     5         6    7   8  ...   11  \
0  1001.0  1001  1S30  5:00:00  MP   GL  1M94   9:06:00   GL  MP  ...  NaN   
1  1101.0  1101   1P1  6:35:00  MP  Vic  9E06  07:02:00  Vic   N  ...    N   

    12    13        14   15   16    17       18   19   20  
0  NaN   NaN       NaN  NaN  NaN   NaN      NaN  NaN  NaN  
1  Liv  9E13  13:26:00  Liv  Vic  1P26  4:40:00  Vic   MP  

[2 rows x 22 columns]

尝试:

df.groupby(df['C1'].ffill()).apply(pd.melt, id_vars='C1')['value'].unstack().reset_index()

输出:

       C1     0     1        2        3     4        5         6         7  \
0  1001.0  1S30  1M94  5:00:00  9:06:00    MP       GL        GL        MP   
1  1101.0   1P1  9E06     9M08     9E13  1P26  6:35:00  07:02:00  10:02:00   

          8  ...   10   11   12   13   14   15   16   17   18   19  
0       NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  
1  13:26:00  ...   MP  Vic    N  Liv  Vic  Vic    N  Liv  Vic   MP  

[2 rows x 21 columns]