【发布时间】:2017-07-25 12:23:09
【问题描述】:
我有下面称为 df1_df2 的数据框:
IdDeviceTypeNameDevice IdBox IdDeviceValue DateDeviceValue ValueDeviceValue weekday hour value
IdDevice
119 48 Chaudière Maud Ferrand 4 536448 2015-11-27 17:54:00 On 4 17 1
119 48 Chaudière Maud Ferrand 4 536449 2015-11-27 17:54:00 Off 4 17 0
119 48 Chaudière Maud Ferrand 4 536450 2015-11-27 17:54:00 On 4 17 1
119 48 Chaudière Maud Ferrand 4 536451 2015-11-27 17:54:00 Off 4 17 0
119 48 Chaudière Maud Ferrand 4 536453 2015-11-27 18:09:00 On 4 18 1
我想按绘图中的值(在“值”列中,对于每个设备类型(在“IdDeviceType”列中)进行分组,将“小时”列作为轴。
我们的想法是在给定一天中的小时数的情况下查看加热器或其他设备何时打开或关闭。
这就是我所做的:
df1_df2['value']= df1_df2['ValueDeviceValue']
df1_df2.loc[df1_df2['ValueDeviceValue'].str.lower()=='on','value'] = 1.
df1_df2.loc[df1_df2['ValueDeviceValue'].str.lower()=='off','value']= 0.
def my_plot(df,devids,idboxes):
df = df[df['IdDeviceType'].isin(devids)]
print (set(df.value.values))
vals = [df[df['IdBox']== idb].groupby('hour')['value'].mean() for idb in idboxes]
for val in vals :
plt.plot(val)
当我测试它时:
my_plot(df1_df2, [48], [4, 5])
我收到以下错误消息。看起来我不能group.by.mean,因为值列未被识别为数字。
DataError Traceback (most recent call last)
<ipython-input-447-75ef0a27eb5e> in <module>()
----> 1 my_plot(df1_df2,[48],[4,5])
<ipython-input-445-b5ff09b606b7> in my_plot(df, devids, idboxes)
4 print (set(df.value.values))
5
6 vals = [df[df['IdBox']== idb].groupby('hour')['value'].mean() for idb in idboxes]
7 for val in vals :
8 #print (val)
<ipython-input-445-b5ff09b606b7> in <listcomp>(.0)
4 print (set(df.value.values))
5
6 vals = [df[df['IdBox']== idb].groupby('hour')['value'].mean() for idb in idboxes]
7 for val in vals :
8 #print (val)
/Users/chloegiraut/anaconda/lib/python3.5/site- packages/pandas/core/groupby.py in mean(self)
962 """
963 try:
964 return self._cython_agg_general('mean')
965 except GroupByError:
966 raise
/Users/chloegiraut/anaconda/lib/python3.5/site- packages/pandas/core/groupby.py in _cython_agg_general(self, how, numeric_only)
763
764 if len(output) == 0:
765 raise DataError('No numeric types to aggregate')
766
767 return self._wrap_aggregated_output(output, names)
DataError: No numeric types to aggregate
【问题讨论】:
标签: python pandas dataframe group-by mean