在时间戳上合并来自不同数据帧的列

时间:2019-08-11 12:58:43

标签: python pandas

我有几个带有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进行合并,但结果始终是我所展示的结果。我需要使用重采样功能对日期重新采样吗?

非常感谢您

我尝试对此最终数据帧进行编码是:

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

但是结果就是您之前发现的

1 个答案:

答案 0 :(得分:0)

这吗?

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