首页 > 解决方案 > 在时间戳上组合来自不同数据帧的列

问题描述

我有几个带有 ID、时间戳和值的数据框。我正在通过合并数据帧来创建最终的数据帧,并且我想根据时间戳列出每个数据帧中的所有值(如果有)。现在我的(错误的)最终数据框是这样的:

              Date            ID     ValDf1       ValDf2        ValDf3
104 2017-03-01 04:00:00      13971   5.333333       NaN        NaN
105 2017-03-01 06:00:00      13971   5.333333       NaN        NaN
106 2017-03-01 06:24:00      13971   5.333333       NaN        NaN
107 2017-03-01 07:00:00      13971   4.666667       NaN        NaN
108 2017-03-01 07:59:00      13971   4.000000       NaN        NaN
109 2017-03-01 08:00:00      13971   4.000000       NaN        NaN
110 2017-03-01 10:30:00      13971   3.333333       NaN        NaN
111 2017-03-01 12:00:00      13971   2.666667       NaN        NaN
112 2017-02-25 08:00:00      13971        NaN       NaN   0.000000
113 2017-02-25 12:00:00      13971        NaN       NaN   5.000000
114 2017-02-25 14:00:00      13971        NaN       NaN   5.000000
115 2017-02-25 16:03:00      13971        NaN       NaN   5.000000
116 2017-02-25 17:00:00      13971        NaN       NaN   5.000000
117 2017-02-25 18:43:00      13971        NaN       NaN   6.000000

现在,我想在基于日期的唯一列中对它们进行排序:例如,像这样:

                  Date            ID     ValDf1       ValDf2        ValDf3
104 2017-02-25 04:00:00      13971   5.333333       NaN        0.000000
105 2017-02-25 06:00:00      13971   5.333333       NaN        5.000000
106 2017-02-25 06:24:00      13971   5.333333       NaN        5.000000
107 2017-03-01 07:00:00      13971   4.666667       NaN        NaN
108 2017-03-01 07:59:00      13971   4.000000       NaN        NaN
109 2017-03-01 08:00:00      13971   4.000000       NaN        NaN
110 2017-03-01 10:30:00      13971   3.333333       NaN        NaN
111 2017-03-01 12:00:00      13971   2.666667       NaN        NaN

有没有办法我可以做到这一点?我尝试使用 concat 和 merge,但结果始终是我展示的结果。我是否需要使用重采样功能重新采样日期?

非常感谢

我对这个最终数据框的编码尝试是:

finalDf = pd.DataFrame()
frame = [df1, df2, df3]
finalDf = pd.concat(frame)
finalDf = visScore.groupby('ID')['Date']

但结果是你之前发现的

标签: pythonpandas

解决方案


这个?

df.groupby(['Date', 'ID']).sum()                                                                                                                                           

                   ValDf1  ValDf2  ValDf3
Date     ID                              
04:00:00 13971  5.333333     0.0     0.0
06:00:00 13971  5.333333     0.0     0.0
06:24:00 13971  5.333333     0.0     0.0
07:00:00 13971  4.666667     0.0     0.0
07:59:00 13971  4.000000     0.0     0.0
08:00:00 13971  4.000000     0.0     0.0
10:30:00 13971  3.333333     0.0     0.0
12:00:00 13971  2.666667     0.0     5.0
14:00:00 13971  0.000000     0.0     5.0
16:03:00 13971  0.000000     0.0     5.0
17:00:00 13971  0.000000     0.0     5.0
18:43:00 13971  0.000000     0.0     6.0

有多个数据框:

pd.concat([df, df]).groupby(['Date', 'ID']).sum()                                                                                                                               

                   ValDf1  ValDf2  ValDf3
Date     ID                              
04:00:00 13971  10.666666     0.0     0.0
06:00:00 13971  10.666666     0.0     0.0
06:24:00 13971  10.666666     0.0     0.0
07:00:00 13971   9.333334     0.0     0.0
07:59:00 13971   8.000000     0.0     0.0
08:00:00 13971   8.000000     0.0     0.0
10:30:00 13971   6.666666     0.0     0.0
12:00:00 13971   5.333334     0.0    10.0
14:00:00 13971   0.000000     0.0    10.0
16:03:00 13971   0.000000     0.0    10.0
17:00:00 13971   0.000000     0.0    10.0
18:43:00 13971   0.000000     0.0    12.0

推荐阅读