通过组合不同的组来创建新的数据框

时间:2020-04-29 04:34:05

标签: python pandas group-by

          id      source                 Date       CVI
67092  10365     sat     2016-11-20 00:00:00      1.9
67093  10365     nel-2   2016-11-20 00:00:00      1.5
67094  10365     sat     2016-12-06 00:00:00   1.436964
67095  10365     sat     2016-12-22 00:00:00        NaN
67096  10365     sat     2017-01-07 00:00:00   4.835949
67097  10365     sat     2017-01-23 00:00:00  10.033607
...      ...         ...                  ...        ...
723    84650  nel-2      2020-04-03 00:00:00   5.085851
724    84650  nel-2      2020-04-08 00:00:00   4.375207
725    84650  nel-2      2020-04-13 00:00:00   0.040688
726    84650  nel-2      2020-04-18 00:00:00   3.151000

根据上面的数据框,我想创建一个新的数据框,其中同一行id和不同Date的{​​{1}}。例如输出应如下所示:

source

我尝试使用groupby,但是它没有完成我想要的操作。请注意,结果表仅包含其中两个 id Date sat_CVI nel-2_CVI 0 10365 2016-11-20 00:00:00 1.9 1.5

相同的id都具有相同的CVI值的行。

1 个答案:

答案 0 :(得分:1)

如果没有重复的三元组idDatesource值,请使用DataFrame.set_indexSeries.unstack进行整形,然后按{{3 }},并通过DataFrame.add_suffix删除缺少值的行:

df1 = (df.set_index(['id','Date','source'])['CVI']
         .unstack()
         .add_suffix('_CVI')
         .dropna()
         .reset_index()
         .rename_axis(None, axis=1))
print (df1)
      id                 Date  nel-2_CVI  sat_CVI
0  10365  2016-11-20 00:00:00        1.5      1.9

如果有可能重复,则必须先解决DataFrame.dropna(它也适用于没有重复的三元组,然后没有聚合)的问题,并使用summean而不是{{1 }}和set_index

unstack