0

我有一个大的 csv 文件,其中日期设置为索引(例如 2018-10-31 12:00)和多列,1 列“方向”列出房间 IDS(刺,例如 N1001),另一列“值”列出数值(漂浮)。我想做的是获取每个房间每 1 天的平均值,以便绘制排名。这是我到目前为止所拥有的:

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

df = pd.read_csv('file.csv', index_col=0, parse_dates=['TS_TIMESTAMP'])
df.set_index('TS_TIMESTAMP', inplace=True)
#only datetimes between 07:00 and 18:00
df1 = df.between_time('07:00', '18:00')
c = df1.pivot(columns='Orientation', values='Quality_Value')
#mean of ppm per room
c.loc['mean'] = c.mean()

#select row 'mean' to make ranking
rk = c.ix['mean']

#make series into frame
data = pd.DataFrame({'Orientation':rk.index, 'Mean_Value':rk.values})
ranked = data.sort_values('Mean_Value', ascending=True)
# Draw plot
fig, ax = plt.subplots(figsize=(16,10), dpi= 80)
ax.vlines(x=ranked.Orientation, ymin=0, ymax=ranked.Mean_Value, color='firebrick', alpha=0.7, linewidth=2)
ax.scatter(x=ranked.Orientation, y=ranked.Mean_Value, s=20, color='firebrick', alpha=0.7)

# Title, Label, Ticks and Ylim
ax.set_title('ppm ranking D18', fontdict={'size':22})
ax.set_ylabel('CO2 Concentration in ppm')
ax.set_xticks(ranked.Orientation)
ax.set_xticklabels(ranked.Orientation.str.upper(), rotation=30, fontdict={'horizontalalignment': 'right', 'size':12})
ax.set_ylim(0, 1400)

# Annotate
for row in ranked.itertuples():
    ax.text(row.Orientation, row.Mean_Value, s=round(row.Mean_Value, 1), horizontalalignment= 'center', verticalalignment='baseline', fontsize=9)

plt.show()

我得到的看起来像这样: 排名图

问题是我收到了 DeprecationWarning: .ix is deprecated。并且平均值是针对整个时间范围(1个月)计算的,但我希望每天都有平均值。

非常感谢任何帮助/建议。谢谢你。

这是如何构建 csv 的示例 (pd.read_csv):

TS_TIMESTAMP TS_ID Orientation AirQuality_Value
2018-10-13 07:45:00 1284.0 NR1022 535.0000000000001
2018-10-14 07:15:00 1329.0 ER1051 777.0
2018-10-25 22:15:00 1260.0 WR1032 794.0
2018-10-17 06:00:00 1321.0 ER1052 836.0
2018-10-09 04:15:00 1382.0 ER1067 922.0

将其复制到剪贴板并阅读:

df = pd.read_clipboard(header=0, index_col=[0, 1])
df = df.drop('AirQuality_Value', axis=1)
df.columns = ['TS_ID', 'Orientation',  'AirQuality_Value']
4

0 回答 0