【发布时间】:2018-01-31 00:02:04
【问题描述】:
我有以下两个要合并的数据框。
df1:
id time station
0 a 22.08.2017 12:00:00 A1
1 b 22.08.2017 12:00:00 A3
2 a 22.08.2017 13:00:00 A2
...
pivot:
station A1 A2 A3
0 time
1 22.08.2017 12:00:00 10 12 11
2 22.08.2017 13:00:00 9 7 3
3 22.08.2017 14:00:00 2 3 4
4 22.08.2017 15:00:00 3 2 7
...
它应该看起来像:
merge:
id time station value
0 a 22.08.2017 12:00:00 A1 10
1 b 22.08.2017 12:00:00 A3 11
2 a 22.08.2017 13:00:00 A2 7
...
现在我想在数据框中添加一列,其中包含数据透视表中的正确值。我未能包括合并的列标签。 我构建了类似的东西,但它不起作用:
merge = pd.merge(df1, pivot, how="left", left_on=["time", "station"], right_on=["station", pivot.columns])
有什么帮助吗?
编辑:
按照建议,我尝试使用以下数据而不是数据透视表:
df2:
time station value
22.08.2017 12:00:00 A1 10
22.08.2017 12:00:00 A2 12
22.08.2017 12:00:00 A3 11
...
22.08.2017 13:00:00 A1 9
22.08.2017 13:00:00 A2 7
22.08.2017 13:00:00 A3 3
该表包含每个时间戳的大约 1300 个不同的电台。总而言之,我有超过 115.000.000 行。我的 df1 有 5.000.000 行。
现在我尝试合并 df1.head(100) 和 df2,但结果所有值都是 nan。因此我使用了这个:
merge = pd.merge(df1.head(100), df2, how="left", on=["time", "station"])
另一个问题是合并需要几分钟,所以我预计整个 df1 需要几天时间。
【问题讨论】:
-
你能用示例数据发布你是如何到达 df2 的吗?
-
df2 是什么意思?如果你申请我要到达的数据框,我找出来,哪个时间和站属于第一个id。然后我与枢轴数据帧进行比较,得到相同时间和站点的值,然后继续下一行。因此我创建了一个 for 循环,但它不是那么快。这就是我想通过合并数据来做到这一点的原因。
-
对不起,我看错了-
pivot数据框。你有样本数据来重新创建这个吗?我想知道是否有更好/更简单的方法来解决这个问题。 -
在所有值都低于彼此之前。然后我使用 pandas.pivot_table() 聚合所有时间并将站点切换到列名。
-
那么你应该在你的枢轴之前对数据框执行合并,正如我在下面的回答中提到的那样。
标签: python-3.x pandas merge pivot-table