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
值的行。
答案 0 :(得分:1)
如果没有重复的三元组id
,Date
和source
值,请使用DataFrame.set_index
和Series.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
(它也适用于没有重复的三元组,然后没有聚合)的问题,并使用sum
,mean
而不是{{1 }}和set_index
:
unstack