数学建模——校园供水系统智能管理
import pandas as pd
data1=pd.read_excel("C://Users//JJH//Desktop//E//附件_一季度.xlsx")
data2=pd.read_excel("C://Users//JJH//Desktop//E//附件_二季度.xlsx")
data3=pd.read_excel("C://Users//JJH//Desktop//E//附件_三季度.xlsx")
data4=pd.read_excel("C://Users//JJH//Desktop//E//附件_四季度.xlsx")
data1
| 水表名 | 水表号 | 采集时间 | 上次读数 | 当前读数 | 用量 | |
|---|---|---|---|---|---|---|
| 0 | 司法鉴定中心 | 0 | 2019/1/1 00:15:00 | 2157.1 | 2157.1 | 0.0 |
| 1 | 司法鉴定中心 | 0 | 2019/1/1 00:30:00 | 2157.1 | 2157.1 | 0.0 |
| 2 | 司法鉴定中心 | 0 | 2019/1/1 00:45:00 | 2157.1 | 2157.1 | 0.0 |
| 3 | 司法鉴定中心 | 0 | 2019/1/1 01:00:00 | 2157.1 | 2157.1 | 0.0 |
| 4 | 司法鉴定中心 | 0 | 2019/1/1 01:15:00 | 2157.1 | 2157.1 | 0.0 |
| ... | ... | ... | ... | ... | ... | ... |
| 729278 | 物业 | 3030100102 | 2019/3/31 22:45:00 | 50.9 | 50.9 | 0.0 |
| 729279 | 物业 | 3030100102 | 2019/3/31 23:00:00 | 50.9 | 50.9 | 0.0 |
| 729280 | 物业 | 3030100102 | 2019/3/31 23:15:00 | 50.9 | 50.9 | 0.0 |
| 729281 | 物业 | 3030100102 | 2019/3/31 23:30:00 | 50.9 | 50.9 | 0.0 |
| 729282 | 物业 | 3030100102 | 2019/3/31 23:45:00 | 50.9 | 50.9 | 0.0 |
729283 rows × 6 columns
data1.isnull().sum()
水表名 0
水表号 0
采集时间 0
上次读数 0
当前读数 0
用量 0
dtype: int64
data2.isnull().sum()
水表名 0
水表号 0
采集时间 0
上次读数 0
当前读数 0
用量 0
dtype: int64
data3.isnull().sum()
水表名 0
水表号 0
采集时间 0
上次读数 0
当前读数 0
用量 0
dtype: int64
data4.isnull().sum()
水表名 0
水表号 0
采集时间 0
上次读数 0
当前读数 0
用量 0
dtype: int64
import numpy as np
# 合并数据
data1['季度'] = pd.Series(["一季度" for i in range(len(data1.index))])
data2['季度'] = pd.Series(["二季度" for i in range(len(data2.index))])
data3['季度'] = pd.Series(["三季度" for i in range(len(data3.index))])
data4['季度'] = pd.Series(["四季度" for i in range(len(data4.index))])
data1
| 水表名 | 水表号 | 采集时间 | 上次读数 | 当前读数 | 用量 | 季度 | |
|---|---|---|---|---|---|---|---|
| 0 | 司法鉴定中心 | 0 | 2019/1/1 00:15:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| 1 | 司法鉴定中心 | 0 | 2019/1/1 00:30:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| 2 | 司法鉴定中心 | 0 | 2019/1/1 00:45:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| 3 | 司法鉴定中心 | 0 | 2019/1/1 01:00:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| 4 | 司法鉴定中心 | 0 | 2019/1/1 01:15:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 729278 | 物业 | 3030100102 | 2019/3/31 22:45:00 | 50.9 | 50.9 | 0.0 | 一季度 |
| 729279 | 物业 | 3030100102 | 2019/3/31 23:00:00 | 50.9 | 50.9 | 0.0 | 一季度 |
| 729280 | 物业 | 3030100102 | 2019/3/31 23:15:00 | 50.9 | 50.9 | 0.0 | 一季度 |
| 729281 | 物业 | 3030100102 | 2019/3/31 23:30:00 | 50.9 | 50.9 | 0.0 | 一季度 |
| 729282 | 物业 | 3030100102 | 2019/3/31 23:45:00 | 50.9 | 50.9 | 0.0 | 一季度 |
729283 rows × 7 columns
data = data1.append([data2,data3,data4],ignore_index=True) # 添加合并
data
C:\Users\JJH\AppData\Local\Temp\ipykernel_31264\4019438690.py:1: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.data = data1.append([data2,data3,data4],ignore_index=True) # 添加合并
| 水表名 | 水表号 | 采集时间 | 上次读数 | 当前读数 | 用量 | 季度 | |
|---|---|---|---|---|---|---|---|
| 0 | 司法鉴定中心 | 0 | 2019/1/1 00:15:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| 1 | 司法鉴定中心 | 0 | 2019/1/1 00:30:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| 2 | 司法鉴定中心 | 0 | 2019/1/1 00:45:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| 3 | 司法鉴定中心 | 0 | 2019/1/1 01:00:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| 4 | 司法鉴定中心 | 0 | 2019/1/1 01:15:00 | 2157.1 | 2157.1 | 0.0 | 一季度 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 3086783 | 消防 | 3620303200 | 2019/12/31 22:45:00 | 22.0 | 22.0 | 0.0 | 四季度 |
| 3086784 | 消防 | 3620303200 | 2019/12/31 23:00:00 | 22.0 | 22.0 | 0.0 | 四季度 |
| 3086785 | 消防 | 3620303200 | 2019/12/31 23:15:00 | 22.0 | 22.0 | 0.0 | 四季度 |
| 3086786 | 消防 | 3620303200 | 2019/12/31 23:30:00 | 22.0 | 22.0 | 0.0 | 四季度 |
| 3086787 | 消防 | 3620303200 | 2019/12/31 23:45:00 | 22.0 | 22.0 | 0.0 | 四季度 |
3086788 rows × 7 columns
x=data[['水表名','用量','采集时间']]
x
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 0 | 司法鉴定中心 | 0.0 | 2019/1/1 00:15:00 |
| 1 | 司法鉴定中心 | 0.0 | 2019/1/1 00:30:00 |
| 2 | 司法鉴定中心 | 0.0 | 2019/1/1 00:45:00 |
| 3 | 司法鉴定中心 | 0.0 | 2019/1/1 01:00:00 |
| 4 | 司法鉴定中心 | 0.0 | 2019/1/1 01:15:00 |
| ... | ... | ... | ... |
| 3086783 | 消防 | 0.0 | 2019/12/31 22:45:00 |
| 3086784 | 消防 | 0.0 | 2019/12/31 23:00:00 |
| 3086785 | 消防 | 0.0 | 2019/12/31 23:15:00 |
| 3086786 | 消防 | 0.0 | 2019/12/31 23:30:00 |
| 3086787 | 消防 | 0.0 | 2019/12/31 23:45:00 |
3086788 rows × 3 columns
x1=x[x['水表名']=='消防']
x1
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 1500912 | 消防 | 0.0 | 2019/4/22 12:15:00 |
| 1500913 | 消防 | 0.0 | 2019/4/22 12:30:00 |
| 1500914 | 消防 | 0.0 | 2019/4/22 12:45:00 |
| 1500915 | 消防 | 0.0 | 2019/4/22 13:00:00 |
| 1500916 | 消防 | 0.0 | 2019/4/22 13:15:00 |
| ... | ... | ... | ... |
| 3086783 | 消防 | 0.0 | 2019/12/31 22:45:00 |
| 3086784 | 消防 | 0.0 | 2019/12/31 23:00:00 |
| 3086785 | 消防 | 0.0 | 2019/12/31 23:15:00 |
| 3086786 | 消防 | 0.0 | 2019/12/31 23:30:00 |
| 3086787 | 消防 | 0.0 | 2019/12/31 23:45:00 |
23984 rows × 3 columns
import matplotlib.pyplot as plt
print(len(x1))
23984
# 自定义x轴刻度
xticks = ['Jan', 'Mar', 'May', 'Jul', 'Sep','Nov'] # 自定义刻度标签
x = range(23984)# 自定义x轴刻度
num_ticks = 6 # 指定刻度数量
step = len(x) // num_ticks # 计算刻度步长
xtick_positions = [i * step for i in range(num_ticks)] # 生成刻度位置
plt.xticks(xtick_positions, xticks)
plt.plot(x1['采集时间'],x1['用量'],color='black',linewidth=0.5)
plt.show()

x=data[['水表名','用量','采集时间']]
x
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 0 | 司法鉴定中心 | 0.0 | 2019/1/1 00:15:00 |
| 1 | 司法鉴定中心 | 0.0 | 2019/1/1 00:30:00 |
| 2 | 司法鉴定中心 | 0.0 | 2019/1/1 00:45:00 |
| 3 | 司法鉴定中心 | 0.0 | 2019/1/1 01:00:00 |
| 4 | 司法鉴定中心 | 0.0 | 2019/1/1 01:15:00 |
| ... | ... | ... | ... |
| 3086783 | 消防 | 0.0 | 2019/12/31 22:45:00 |
| 3086784 | 消防 | 0.0 | 2019/12/31 23:00:00 |
| 3086785 | 消防 | 0.0 | 2019/12/31 23:15:00 |
| 3086786 | 消防 | 0.0 | 2019/12/31 23:30:00 |
| 3086787 | 消防 | 0.0 | 2019/12/31 23:45:00 |
3086788 rows × 3 columns
x2=x[x['水表名']=='XXX第一学生宿舍']
x2
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 220372 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:15:00 |
| 220373 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:30:00 |
| 220374 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:45:00 |
| 220375 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:00:00 |
| 220376 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:15:00 |
| ... | ... | ... | ... |
| 2533541 | XXX第一学生宿舍 | 0.40 | 2019/12/31 22:45:00 |
| 2533542 | XXX第一学生宿舍 | 0.40 | 2019/12/31 23:00:00 |
| 2533543 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:15:00 |
| 2533544 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:30:00 |
| 2533545 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:45:00 |
35039 rows × 3 columns
# 自定义x轴刻度
xticks = ['Jan', 'Mar', 'May', 'Jul', 'Sep','Nov'] # 自定义刻度标签# 自定义x轴刻度
num_ticks = 6 # 指定刻度数量
step = len(x2) // num_ticks # 计算刻度步长
xtick_positions = [i * step for i in range(num_ticks)] # 生成刻度位置
plt.xticks(xtick_positions, xticks)
plt.plot(x2['采集时间'],x2['用量'],color='black',linewidth=0.5)
plt.show()

x=data[['水表名','用量','采集时间']]
x3=x[x['水表名']=='留学生楼(新)']
# 自定义x轴刻度
xticks = ['Jan', 'Mar', 'May', 'Jul', 'Sep','Nov'] # 自定义刻度标签# 自定义x轴刻度
num_ticks = 6 # 指定刻度数量
step = len(x3) // num_ticks # 计算刻度步长
xtick_positions = [i * step for i in range(num_ticks)] # 生成刻度位置
plt.xticks(xtick_positions, xticks)
plt.plot(x3['采集时间'],x3['用量'],color='black',linewidth=0.3)
plt.show()

x=data[['水表名','用量','采集时间']]
x4=x[x['水表名']=='XXX教学大楼总表']
# 自定义x轴刻度
xticks = ['Jan', 'Mar', 'May', 'Jul', 'Sep','Nov'] # 自定义刻度标签# 自定义x轴刻度
num_ticks = 6 # 指定刻度数量
step = len(x4) // num_ticks # 计算刻度步长
xtick_positions = [i * step for i in range(num_ticks)] # 生成刻度位置
plt.xticks(xtick_positions, xticks)
plt.plot(x4['采集时间'],x4['用量'],color='black',linewidth=0.3)
plt.show()

import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 指定字体为SimHei
labels = ['消防', '留学生楼(新)', 'XXX教学大楼总表']plt.boxplot([x1['用量'],x3['用量'],x4['用量']])plt.xticks(range(1, 4), labels)
# 显示图形
plt.show()

x5=x[x['水表名']=='XXX第四学生宿舍']
x5
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 246289 | XXX第四学生宿舍 | 0.4 | 2019/1/1 00:15:00 |
| 246290 | XXX第四学生宿舍 | 0.4 | 2019/1/1 00:30:00 |
| 246291 | XXX第四学生宿舍 | 0.4 | 2019/1/1 00:45:00 |
| 246292 | XXX第四学生宿舍 | 0.4 | 2019/1/1 01:00:00 |
| 246293 | XXX第四学生宿舍 | 0.4 | 2019/1/1 01:15:00 |
| ... | ... | ... | ... |
| 2560037 | XXX第四学生宿舍 | 0.7 | 2019/12/31 22:45:00 |
| 2560038 | XXX第四学生宿舍 | 0.6 | 2019/12/31 23:00:00 |
| 2560039 | XXX第四学生宿舍 | 0.6 | 2019/12/31 23:15:00 |
| 2560040 | XXX第四学生宿舍 | 0.5 | 2019/12/31 23:30:00 |
| 2560041 | XXX第四学生宿舍 | 1.2 | 2019/12/31 23:45:00 |
35039 rows × 3 columns
x6=x[x['水表名']=='茶园+']
x6
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 611260 | 茶园+ | 0.0 | 2019/1/3 16:15:00 |
| 611261 | 茶园+ | 0.0 | 2019/1/3 16:30:00 |
| 611262 | 茶园+ | 0.0 | 2019/1/3 16:45:00 |
| 611263 | 茶园+ | 0.0 | 2019/1/3 17:00:00 |
| 611264 | 茶园+ | 0.0 | 2019/1/3 17:15:00 |
| ... | ... | ... | ... |
| 2945006 | 茶园+ | 0.0 | 2019/12/31 22:45:00 |
| 2945007 | 茶园+ | 0.0 | 2019/12/31 23:00:00 |
| 2945008 | 茶园+ | 0.0 | 2019/12/31 23:15:00 |
| 2945009 | 茶园+ | 0.0 | 2019/12/31 23:30:00 |
| 2945010 | 茶园+ | 0.0 | 2019/12/31 23:45:00 |
34249 rows × 3 columns
x7=x[x['水表名']=='XXX4舍热泵热水舍']
x7
| 水表名 | 用量 | 采集时间 |
|---|
x21=x[x['水表名']=='XXX第一学生宿舍']
x21
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 220372 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:15:00 |
| 220373 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:30:00 |
| 220374 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:45:00 |
| 220375 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:00:00 |
| 220376 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:15:00 |
| ... | ... | ... | ... |
| 2533541 | XXX第一学生宿舍 | 0.40 | 2019/12/31 22:45:00 |
| 2533542 | XXX第一学生宿舍 | 0.40 | 2019/12/31 23:00:00 |
| 2533543 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:15:00 |
| 2533544 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:30:00 |
| 2533545 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:45:00 |
35039 rows × 3 columns
x22=x[x['水表名']=='XXX第二学生宿舍']
x22
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 229011 | XXX第二学生宿舍 | 0.9 | 2019/1/1 00:15:00 |
| 229012 | XXX第二学生宿舍 | 0.7 | 2019/1/1 00:30:00 |
| 229013 | XXX第二学生宿舍 | 0.8 | 2019/1/1 00:45:00 |
| 229014 | XXX第二学生宿舍 | 0.7 | 2019/1/1 01:00:00 |
| 229015 | XXX第二学生宿舍 | 0.1 | 2019/1/1 01:15:00 |
| ... | ... | ... | ... |
| 2542373 | XXX第二学生宿舍 | 0.1 | 2019/12/31 22:45:00 |
| 2542374 | XXX第二学生宿舍 | 0.1 | 2019/12/31 23:00:00 |
| 2542375 | XXX第二学生宿舍 | 0.2 | 2019/12/31 23:15:00 |
| 2542376 | XXX第二学生宿舍 | 0.1 | 2019/12/31 23:30:00 |
| 2542377 | XXX第二学生宿舍 | 0.1 | 2019/12/31 23:45:00 |
35039 rows × 3 columns
x21.set_index('采集时间', inplace=True)
x22.set_index('采集时间', inplace=True)
print(x21['用量'].dtypes,x21['水表名'])
print(x22['用量'].dtypes,x22['水表名'])
x_sum = x21.add(x22, fill_value=0)# 打印结果
x_sum
float64 采集时间
2019/1/1 00:15:00 XXX第一学生宿舍
2019/1/1 00:30:00 XXX第一学生宿舍
2019/1/1 00:45:00 XXX第一学生宿舍
2019/1/1 01:00:00 XXX第一学生宿舍
2019/1/1 01:15:00 XXX第一学生宿舍...
2019/12/31 22:45:00 XXX第一学生宿舍
2019/12/31 23:00:00 XXX第一学生宿舍
2019/12/31 23:15:00 XXX第一学生宿舍
2019/12/31 23:30:00 XXX第一学生宿舍
2019/12/31 23:45:00 XXX第一学生宿舍
Name: 水表名, Length: 35039, dtype: object
float64 采集时间
2019/1/1 00:15:00 XXX第二学生宿舍
2019/1/1 00:30:00 XXX第二学生宿舍
2019/1/1 00:45:00 XXX第二学生宿舍
2019/1/1 01:00:00 XXX第二学生宿舍
2019/1/1 01:15:00 XXX第二学生宿舍...
2019/12/31 22:45:00 XXX第二学生宿舍
2019/12/31 23:00:00 XXX第二学生宿舍
2019/12/31 23:15:00 XXX第二学生宿舍
2019/12/31 23:30:00 XXX第二学生宿舍
2019/12/31 23:45:00 XXX第二学生宿舍
Name: 水表名, Length: 35039, dtype: object
| 水表名 | 用量 | |
|---|---|---|
| 采集时间 | ||
| 2019/1/1 00:15:00 | XXX第一学生宿舍XXX第二学生宿舍 | 1.02 |
| 2019/1/1 00:30:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.82 |
| 2019/1/1 00:45:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.92 |
| 2019/1/1 01:00:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.82 |
| 2019/1/1 01:15:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.22 |
| ... | ... | ... |
| 2019/12/31 22:45:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.50 |
| 2019/12/31 23:00:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.50 |
| 2019/12/31 23:15:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.70 |
| 2019/12/31 23:30:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.60 |
| 2019/12/31 23:45:00 | XXX第一学生宿舍XXX第二学生宿舍 | 0.60 |
35039 rows × 2 columns
x26=x[x['水表名']=='茶园+']
x26
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 611260 | 茶园+ | 0.0 | 2019/1/3 16:15:00 |
| 611261 | 茶园+ | 0.0 | 2019/1/3 16:30:00 |
| 611262 | 茶园+ | 0.0 | 2019/1/3 16:45:00 |
| 611263 | 茶园+ | 0.0 | 2019/1/3 17:00:00 |
| 611264 | 茶园+ | 0.0 | 2019/1/3 17:15:00 |
| ... | ... | ... | ... |
| 2945006 | 茶园+ | 0.0 | 2019/12/31 22:45:00 |
| 2945007 | 茶园+ | 0.0 | 2019/12/31 23:00:00 |
| 2945008 | 茶园+ | 0.0 | 2019/12/31 23:15:00 |
| 2945009 | 茶园+ | 0.0 | 2019/12/31 23:30:00 |
| 2945010 | 茶园+ | 0.0 | 2019/12/31 23:45:00 |
34249 rows × 3 columns
x21=x[x['水表名']=='XXX第一学生宿舍']
x21
| 水表名 | 用量 | 采集时间 | |
|---|---|---|---|
| 220372 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:15:00 |
| 220373 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:30:00 |
| 220374 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:45:00 |
| 220375 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:00:00 |
| 220376 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:15:00 |
| ... | ... | ... | ... |
| 2533541 | XXX第一学生宿舍 | 0.40 | 2019/12/31 22:45:00 |
| 2533542 | XXX第一学生宿舍 | 0.40 | 2019/12/31 23:00:00 |
| 2533543 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:15:00 |
| 2533544 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:30:00 |
| 2533545 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:45:00 |
35039 rows × 3 columns
df_merged = pd.merge(x21, x26, on='采集时间', how='inner')
df_merged
| 水表名_x | 用量_x | 采集时间 | 水表名_y | 用量_y | |
|---|---|---|---|---|---|
| 0 | XXX第一学生宿舍 | 0.22 | 2019/1/3 16:15:00 | 茶园+ | 0.0 |
| 1 | XXX第一学生宿舍 | 0.22 | 2019/1/3 16:30:00 | 茶园+ | 0.0 |
| 2 | XXX第一学生宿舍 | 0.22 | 2019/1/3 16:45:00 | 茶园+ | 0.0 |
| 3 | XXX第一学生宿舍 | 0.22 | 2019/1/3 17:00:00 | 茶园+ | 0.0 |
| 4 | XXX第一学生宿舍 | 0.22 | 2019/1/3 17:15:00 | 茶园+ | 0.0 |
| ... | ... | ... | ... | ... | ... |
| 34244 | XXX第一学生宿舍 | 0.40 | 2019/12/31 22:45:00 | 茶园+ | 0.0 |
| 34245 | XXX第一学生宿舍 | 0.40 | 2019/12/31 23:00:00 | 茶园+ | 0.0 |
| 34246 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:15:00 | 茶园+ | 0.0 |
| 34247 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:30:00 | 茶园+ | 0.0 |
| 34248 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:45:00 | 茶园+ | 0.0 |
34249 rows × 5 columns
df_merged['总用水量'] = df_merged['用量_x'] + df_merged['用量_y']
df_merged
| 水表名_x | 用量_x | 采集时间 | 水表名_y | 用量_y | 总用水量 | |
|---|---|---|---|---|---|---|
| 0 | XXX第一学生宿舍 | 0.22 | 2019/1/3 16:15:00 | 茶园+ | 0.0 | 0.22 |
| 1 | XXX第一学生宿舍 | 0.22 | 2019/1/3 16:30:00 | 茶园+ | 0.0 | 0.22 |
| 2 | XXX第一学生宿舍 | 0.22 | 2019/1/3 16:45:00 | 茶园+ | 0.0 | 0.22 |
| 3 | XXX第一学生宿舍 | 0.22 | 2019/1/3 17:00:00 | 茶园+ | 0.0 | 0.22 |
| 4 | XXX第一学生宿舍 | 0.22 | 2019/1/3 17:15:00 | 茶园+ | 0.0 | 0.22 |
| ... | ... | ... | ... | ... | ... | ... |
| 34244 | XXX第一学生宿舍 | 0.40 | 2019/12/31 22:45:00 | 茶园+ | 0.0 | 0.40 |
| 34245 | XXX第一学生宿舍 | 0.40 | 2019/12/31 23:00:00 | 茶园+ | 0.0 | 0.40 |
| 34246 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:15:00 | 茶园+ | 0.0 | 0.50 |
| 34247 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:30:00 | 茶园+ | 0.0 | 0.50 |
| 34248 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:45:00 | 茶园+ | 0.0 | 0.50 |
34249 rows × 6 columns
df_merged1 = pd.merge(x21, x26, on='采集时间', how='outer')
df_merged1
| 水表名_x | 用量_x | 采集时间 | 水表名_y | 用量_y | |
|---|---|---|---|---|---|
| 0 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:15:00 | NaN | NaN |
| 1 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:30:00 | NaN | NaN |
| 2 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:45:00 | NaN | NaN |
| 3 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:00:00 | NaN | NaN |
| 4 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:15:00 | NaN | NaN |
| ... | ... | ... | ... | ... | ... |
| 35034 | XXX第一学生宿舍 | 0.40 | 2019/12/31 22:45:00 | 茶园+ | 0.0 |
| 35035 | XXX第一学生宿舍 | 0.40 | 2019/12/31 23:00:00 | 茶园+ | 0.0 |
| 35036 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:15:00 | 茶园+ | 0.0 |
| 35037 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:30:00 | 茶园+ | 0.0 |
| 35038 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:45:00 | 茶园+ | 0.0 |
35039 rows × 5 columns
df_merged1['用量_y'] = df_merged1['用量_y'].replace(np.nan, 0)
df_merged1
# df_merged1['总用水量'] = df_merged1['用量_x'] + df_merged1['用量_y']
# df_merged1
| 水表名_x | 用量_x | 采集时间 | 水表名_y | 用量_y | 总用水量 | |
|---|---|---|---|---|---|---|
| 0 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:15:00 | NaN | 0.0 | 0.12 |
| 1 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:30:00 | NaN | 0.0 | 0.12 |
| 2 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:45:00 | NaN | 0.0 | 0.12 |
| 3 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:00:00 | NaN | 0.0 | 0.12 |
| 4 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:15:00 | NaN | 0.0 | 0.12 |
| ... | ... | ... | ... | ... | ... | ... |
| 35034 | XXX第一学生宿舍 | 0.40 | 2019/12/31 22:45:00 | 茶园+ | 0.0 | 0.40 |
| 35035 | XXX第一学生宿舍 | 0.40 | 2019/12/31 23:00:00 | 茶园+ | 0.0 | 0.40 |
| 35036 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:15:00 | 茶园+ | 0.0 | 0.50 |
| 35037 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:30:00 | 茶园+ | 0.0 | 0.50 |
| 35038 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:45:00 | 茶园+ | 0.0 | 0.50 |
35039 rows × 6 columns
df_merged1['总用水量'] = df_merged1['用量_x'] + df_merged1['用量_y']
df_merged1
| 水表名_x | 用量_x | 采集时间 | 水表名_y | 用量_y | 总用水量 | |
|---|---|---|---|---|---|---|
| 0 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:15:00 | NaN | 0.0 | 0.12 |
| 1 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:30:00 | NaN | 0.0 | 0.12 |
| 2 | XXX第一学生宿舍 | 0.12 | 2019/1/1 00:45:00 | NaN | 0.0 | 0.12 |
| 3 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:00:00 | NaN | 0.0 | 0.12 |
| 4 | XXX第一学生宿舍 | 0.12 | 2019/1/1 01:15:00 | NaN | 0.0 | 0.12 |
| ... | ... | ... | ... | ... | ... | ... |
| 35034 | XXX第一学生宿舍 | 0.40 | 2019/12/31 22:45:00 | 茶园+ | 0.0 | 0.40 |
| 35035 | XXX第一学生宿舍 | 0.40 | 2019/12/31 23:00:00 | 茶园+ | 0.0 | 0.40 |
| 35036 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:15:00 | 茶园+ | 0.0 | 0.50 |
| 35037 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:30:00 | 茶园+ | 0.0 | 0.50 |
| 35038 | XXX第一学生宿舍 | 0.50 | 2019/12/31 23:45:00 | 茶园+ | 0.0 | 0.50 |
35039 rows × 6 columns
相关文章:
数学建模——校园供水系统智能管理
import pandas as pd data1pd.read_excel("C://Users//JJH//Desktop//E//附件_一季度.xlsx") data2pd.read_excel("C://Users//JJH//Desktop//E//附件_二季度.xlsx") data3pd.read_excel("C://Users//JJH//Desktop//E//附件_三季度.xlsx") data4…...
分布式集群——搭建Hadoop环境以及相关的Hadoop介绍
系列文章目录 分布式集群——jdk配置与zookeeper环境搭建 分布式集群——搭建Hadoop环境以及相关的Hadoop介绍 文章目录 前言 一 hadoop的相关概念 1.1 Hadoop概念 补充:块的存储 1.2 HDFS是什么 1.3 三种节点的功能 I、NameNode节点 II、fsimage与edits…...
Python的os.walk()函数使用案例
在Python中,os模块是一个非常实用的工具,它可以让我们与操作系统进行交互,操作文件和目录。在本文中,我们将详细介绍os模块中的遍历文件功能,并通过具体案例和使用场景来解释。 首先,导入os模块。在Pytho…...
学习JAVA打卡第四十五天
StringBuffer类 StringBuffer对象 String对象的字符序列是不可修改的,也就是说,String对象的字符序列的字符不能被修改、删除,即String对象的实体是不可以再发生变化,例如:对于 StringBuffer有三个构造方法ÿ…...
创建K8s pod Webhook
目录 1.前提条件 2.开始创建核心组件Pod的Webhook 2.1.什么是Webhook 2.2.在本地k8s集群安装cert-manager 2.3.创建一个空的文件夹 2.4. 生成工程框架 2.5. 生成核心组件Pod的API 2.6.生成Webhook 2.7.开始实现Webhook相关代码 2.7.1.修改相关配置 2.7.2.修改代码 2…...
抓包-要抓取Spring Boot应用程序的请求
要抓取Spring Boot应用程序的请求,可以按照以下步骤进行操作: 1. 确保你已经按照之前提到的方法设置了Charles代理,并在Charles的SSL代理设置中添加了Spring Boot应用程序的域名。 2. 在Spring Boot应用程序的代码中,添加以下配…...
jmeter+nmon+crontab简单的执行接口定时压测
一、概述 临时接到任务要对系统的接口进行压测,上面的要求就是:压测,并发2000 在不熟悉系统的情况下,按目前的需求,需要做的步骤: 需要有接口脚本需要能监控系统性能需要能定时执行脚本 二、观察 >针…...
ZooKeeper基础命令和Java客户端操作
1、zkCli的常用命令操作 (1)Help (2)ls 使用 ls 命令来查看当前znode中所包含的内容 (3)ls2查看当前节点数据并能看到更新次数等数据 (4)stat查看节点状态 (5…...
【数据分享】2000-2020年全球人类足迹数据(无需转发\免费获取)
人类足迹(Human Footprint)是生态过程和自然景观变化对生态环境造成的压力,是世界各国对生物多样性和生态保护的关注重点。那如何才能获取长时间跨度的人类足迹时空数据呢? 之前我们分享了来自于中国农业大学土地科学与技术学院的城市环境监测及建模&am…...
基于机器学习的fNIRS信号质量控制方法
摘要 尽管功能性近红外光谱(fNIRS)在神经系统研究中的应用越来越广泛,但fNIRS信号处理仍未标准化,并且受到经验和手动操作的高度影响。在任何信号处理过程的开始阶段,信号质量控制(SQC)对于防止错误和不可靠结果至关重要。在fNIRS分析中&…...
分布式锁的三种实现方式是什么?
分布式锁三种实现方式: 基于数据库实现分布式锁;基于缓存(Redis等)实现分布式锁;基于Zookeeper实现分布式锁; 一, 基于数据库实现分布式锁 悲观锁 利用select … where … for update 排他锁…...
华为云软件精英实战营——感受软件改变世界,享受Coding乐趣
机器人已经在诸多领域显现出巨大的商业价值,华为云计算致力于以云助端的方式为机器人产业带来全新机会 如果您是开发爱好者,想了解华为云,想和其他自由开发者交流经验; 如果您是学生,想和正在从事软件开发行业的大佬…...
贪心算法总结篇
文章转自代码随想录 贪心算法总结篇 我刚刚开始讲解贪心系列的时候就说了,贪心系列并不打算严格的从简单到困难这么个顺序来讲解。 因为贪心的简单题可能往往过于简单甚至感觉不到贪心,如果我连续几天讲解简单的贪心,估计录友们一定会不耐…...
ICCV 2023 | 港中文MMLab: 多帧光流估计模型VideoFlow,首次实现亚像素级别误差
本文提出了一个多帧光流估计模型 VideoFlow,旨在充分挖掘视频中的时序信息和运动规律,避免当前主流方法只以两帧图片作为输入而面临的信息瓶颈,显著提升了光流估计的性能。 在公开的 Sintel Bechmark 上,VideoFlow 在 Clean 和 Fi…...
【python爬虫】—图片爬取
图片爬取 需求分析Python实现 需求分析 从https://pic.netbian.com/4kfengjing/网站爬取图片,并保存 Python实现 获取待爬取网页 def get_htmls(pageslist(range(2, 5))):"""获取待爬取网页"""pages_list []for page in pages:u…...
自动化运维工具—Ansible
一、Ansible概述1.1 Ansible是什么1.2 Ansible的特性1.3 Ansible的特点1.4 Ansible数据流向 二、Ansible 环境安装部署三、Ansible 命令行模块(1)command 模块(2)shell 模块(3)cron 模块(4&…...
uniapp 安卓平台签名证书(.keystore)生成
安装JRE环境 下载jre安装包:https://www.oracle.com/java/technologies/downloads/#java8安装jre安装包时,记录安装目录(例:C:\Program Files\Java\jdk-20)打开命令行(cmd),将JRE安装路径添加到系统环境变量 d: se…...
缓存中间件Redis常考知识点
缓存中间件Redis常考知识点 1 什么是RDB和AOF2 Redis的过期键的删除策略3 简述Redis事务实现4 Redis 主从复制的核⼼原理5 Redis有哪些数据结构?分别有哪些典型的应⽤场景?6 Redis分布式锁底层是如何实现的?7 Redis主从复制的核⼼原理8 Redis…...
detour编译问题及导入visual studio
Detours是经过微软认证的一个开源Hook库,Detours在GitHub上,网址为 https://github.com/Microsoft/Detours 注意版本不一样的话也是会出问题的,因为我之前是vs2022的所以之前的detours.lib不能使用,必须用对应版本的x64 Native To…...
江西武功山旅游攻略(周末两日游)
一、 往返路线 1: 出发路线 周五晚上上海出发坐火车🚄到江西萍乡(11.5小时,卧铺550左右) 打车到江西武功山景区,120-150元左右,人均30元,1小时10分左右到达 或者 🚗到达萍乡北之后 出站后步行200米到长途汽车站,乘旅游巴士直达武功山游…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
