python - 在时间戳上组合来自不同数据帧的列
问题描述
我有几个带有 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']
但结果是你之前发现的
解决方案
这个?
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
推荐阅读
- ios - iOS:Jpeg 压缩增加了图像的大小(Swift)
- discord.js - Discord.js:如何在消息中发送 .txt 文件的内容?
- erlang - 无法在 MAC OSX Mojave 上安装 asdf erlang
- node.js - html-pdf:无法加载 PhantomJS 模块。使用 aws ec2 时,您必须使用“options.phantomPath”设置 PhantomJS 二进制文件的路径
- c# - Azure 数字孪生 API 无法使用教程中所述的 DefaultAzureCredential 身份验证方法
- java - 大型 jpa 删除的最佳垃圾收集器
- google-cloud-platform - 通过 Terraform 配置没有外部 IP 的 GCP VM 实例
- angular - 角度 e2e 测试不必要地等待
- php - 在新选项卡上打开图像
- javascript - 如何通过按帐户/ID/类别分组来对值求和?