首页 > 解决方案 > 删除 nan 值后合并几乎相同的行

问题描述

我有一个像这样的数据框,

pri_col col1 col2        Date
     r1    3    4  2020-09-10
     r1    4    1  2020-09-11
     r1    2    7  2020-09-12
     r1    6    4  2020-09-13

注意:“pri_col”列中有更多唯一值。这只是一个示例。所以我给出单一的价值。此外,对于 'pri_col' 的单个值,'Date' 的值将始终是唯一的。我需要这样的数据框,

pri_col col1_2020-09-10 col1_2020-09-11 col1_2020-09-12 col1_2020-09-13 col2_2020-09-10 col2_2020-09-11 col2_2020-09-12 col2_2020-09-13
     r1               3               4               2               6               4               1               7               4

根据之前的解决方案,我尝试了这个解决方案:

df = (df.reset_index()
        .melt(id_vars=['index','pri_col','Date'], 
              var_name='cols',
              value_name='val')
        .pivot(index=['index','pri_col'],
               columns=['cols','Date'],
               values='val'))
df.columns = [f'{a}_{b}' for a, b in df.columns]
df = df.reset_index(level=1).rename_axis(None)
print (df)

但这是生成的数据框:

pri_col col1_2020-09-10 col1_2020-09-11 col1_2020-09-12 col1_2020-09-13 col2_2020-09-10 col2_2020-09-11 col2_2020-09-12 col2_2020-09-13
     r1               3             NaN             NaN             NaN               4             NaN             NaN             NaN
     r1             NaN               4             NaN             NaN             NaN               1             NaN             NaN
     r1             NaN             NaN               2             NaN             NaN             NaN               7             NaN
     r1             NaN             NaN             NaN               6             NaN             NaN             NaN               4

我该如何解决这个问题?

另外,我最近问了一个听起来可能相似的问题。

标签: pythonpandas

解决方案


IIUC,pandas.DataFrame.set_index与 一起使用unstack

new_df = df.set_index(['pri_col', 'Date']).unstack()
new_df.columns = ["%s_%s" % (i, j) for i, j in new_df.columns]
print(new_df)

输出:

         col1_2020-09-10  col1_2020-09-11  col1_2020-09-12  col1_2020-09-13  \
pri_col                                                                       
r1                     3                4                2                6   

         col2_2020-09-10  col2_2020-09-11  col2_2020-09-12  col2_2020-09-13  
pri_col                                                                      
r1                     4                1                7                4  

推荐阅读