首页 > 解决方案 > 根据行名将多行合并为一行(Python)

问题描述

所以我有一组以下通用格式的 csv 文件:

Post_Type      Time1      Time2      ...      TimeN
Type1          1:12
Type1                     2:34
Type1                                         0:35
Type2          1:11
Type3          5:34
Type3                                         2:45

我想将数据框重新格式化为以下格式:

Post_Type      Time1      Time2      ...      TimeN
Type1          1:12       2:34                0:35                                      
Type2          1:11
Type3          5:34                           2:45

我从 python 迁移到 python,R所以我对我在 python 中操作这些数据帧方面所做的事情的理解非常有限,而且我似乎找不到任何其他人试图做这样的事情的例子。表达我正在做的事情的另一种方式是尝试将同一类型的每一行叠加到一行中,该行包含所有时间,每个时间都与它们的原始列相对应。所有列都在原始 csv 中预定义,因此我不需要,也不想创建更多列。

标签: pythonpandascsvdataframe

解决方案


你可以试试这个:首先用空白单元格替换你的空白单元格NaN,然后使用groupby分组Post_Type和调用.first,然后用空白单元格重新替换NaN

df.replace('', np.nan).groupby('Post_Type').first().replace(np.nan, '')

例子:

# Original Dataframe
>>> df
  Post_Type Time1 Time2 TimeN
0     Type1  1:12            
1     Type1        2:34      
2     Type1              0:35
3     Type2  1:11            
4     Type3  5:34            
5     Type3              2:45

# Processed:
>>> df.replace('', np.nan).groupby('Post_Type').first().replace(np.nan, '')
          Time1 Time2 TimeN
Post_Type                  
Type1      1:12  2:34  0:35
Type2      1:11            
Type3      5:34        2:45

注意:就我个人而言,我会保留NaNs 而不是用空白单元格替换,因为它们很有用。


推荐阅读