Pandas 以最有效的方式求和两个日期之间的值?
Pandas sum values between two dates in the most efficient way?
我有一个数据集显示每周报告的产量,另一个数据集报告一些子生产每小时的产量。我现在想以最有效的方式将所有这些每小时的子生产总和与每周报告的价值进行比较。我怎么能做到这一点?我想不惜一切代价避免 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 |
等等。我想要一个新的 table,其中计算每周报告数据的所有日期的每周报告数据和每小时报告数据之间的差异。所以像这样:
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 - 总和(A_Prod_1,A_Prod_2,A_Prod_3,...,A_Prod_N;总之一周的日期时间)我怎样才能最好地做到这一点?
如果有任何帮助,我们将不胜感激 :D
最佳
fidu13
将日期时间存储为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"])
)
我有一个数据集显示每周报告的产量,另一个数据集报告一些子生产每小时的产量。我现在想以最有效的方式将所有这些每小时的子生产总和与每周报告的价值进行比较。我怎么能做到这一点?我想不惜一切代价避免 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 |
等等。我想要一个新的 table,其中计算每周报告数据的所有日期的每周报告数据和每小时报告数据之间的差异。所以像这样:
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 - 总和(A_Prod_1,A_Prod_2,A_Prod_3,...,A_Prod_N;总之一周的日期时间)我怎样才能最好地做到这一点?
如果有任何帮助,我们将不胜感激 :D
最佳 fidu13
将日期时间存储为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"])
)