我有一个数据集,它显示每周报告的产量,另一个数据显示每小时报告一次的产量。现在,我想以最有效的方式将所有这些小时副生产的总和与每周报告的价值相提并论。我怎样才能做到这一点?我想不惜一切代价避免for循环,因为我的数据集非常大。
所以我的数据看起来如下:
每周报告的数据:
Datetime_text | Total_Production_A
--------------------------|--------------------
2014-12-08 00:00:00.000 | 8277000
2014-12-15 00:00:00.000 | 8055000
2014-12-22 00:00:00.000 | 7774000小时数据:
Datetime_text | A_Prod_1 | A_Prod_2 | A_Prod_3 | ...... | A_Prod_N |
--------------------------|-----------|-----------|-----------|-----------|-----------|
2014-12-06 23:00:00.000 | 454 | 9 | 54 | 104 | 4 |
2014-12-07 00:00:00.000 | 0 | NaV | 0 | 23 | 3 |
2014-12-07 01:00:00.000 | 54 | 0 | 4 | NaV | 20 |诸若此类。我想要一个新的表格,其中每周报告数据和每小时报告数据之间的差异是为每周报告数据的所有日期计算的。所以就像这样:
Datetime_text | Diff_Production_A
--------------------------|------------------
2014-12-08 00:00:00.000 | 10
2014-12-15 00:00:00.000 | -100
2014-12-22 00:00:00.000 | 1350如果Diff_Production_A = Total_Production_A - sum(A_Prod_1,A_Prod_2,A_Prod_3,.,A_Prod_N;over每周的所有日期),我如何才能最好地实现这一点?
这方面的任何帮助都是非常有用的:
最佳fidu13
发布于 2022-03-25 13:49:11
将日期时间存储为pd.Timestamp,然后可以对日期进行各种操作。
对于您的问题,它们是按周(从周一开始)对每小时数据进行分组,然后将其与每周数据合并,并计算差异:
weekly["Datetime"] = pd.to_datetime(weekly["Datetime_Text"])
hourly["Datetime"] = pd.to_datetime(hourly["Datetime_Text"])
hourly["HourlyTotal"] = hourly.loc[:, "A_Prod_1":"A_Prod_N"].sum(axis=1)
result = (
hourly.groupby(pd.Grouper(key="Datetime", freq="W-MON"))["HourlyTotal"]
.sum()
.to_frame()
.merge(
weekly[["Datetime", "Total_Production_A"]],
how="outer",
left_index=True,
right_on="Datetime",
)
.assign(Diff=lambda x: x["Total_Production_A"] - x["HourlyTotal"])
)https://stackoverflow.com/questions/71616727
复制相似问题