У меня есть df следующим образом:
EscRF_P2P_Volt_V ContextID StepID Time_Elapsed iso_forest
12.4542121887207 7289972 15 32.472 1
27.1062278747559 7289972 15 33.444 1
622.710632324219 7289972 19 37.503 -1
622.710632324219 7289972 19 38.513000000000005 -1
622.710632324219 7289972 19 39.503 -1
622.710632324219 7289972 19 40.503 -1
622.710632324219 7289972 19 41.503 -1
622.710632324219 7289972 19 42.503 -1
622.710632324219 7289972 19 43.503 -1
622.710632324219 7289972 19 44.503 -1
622.710632324219 7289972 19 45.532000000000004 -1
622.710632324219 7289972 19 46.502 -1
622.710632324219 7289972 19 47.501000000000005 -1
622.710632324219 7289972 19 48.501000000000005 -1
622.710632324219 7289972 19 49.501000000000005 -1
622.710632324219 7289972 19 50.501000000000005 -1
622.710632324219 7289972 19 51.501000000000005 -1
622.710632324219 7289972 19 52.501000000000005 -1
622.710632324219 7289972 19 53.502 -1
23.4432239532471 7289973 24 102.49000000000001 1
23.4432239532471 7289973 24 104.078 1
22.7106227874756 7289973 24 104.92800000000001 1
23.4432239532471 7289973 24 105.81800000000001 1
23.4432239532471 7289973 24 106.918 1
22.7106227874756 7289973 24 107.61000000000001 1
23.4432239532471 7289973 24 108.65 1
23.4432239532471 7289973 24 108.73100000000001 1
23.4432239532471 7289973 24 109.19800000000001 1
23.4432239532471 7289973 24 110.12 1
23.4432239532471 7289973 24 111.11000000000001 1
23.4432239532471 7289973 24 112.108 1
22.7106227874756 7289973 24 113.11000000000001 1
21.97802162170409 7289973 24 114.11000000000001 -1
22.7106227874756 7289973 24 115.11000000000001 1
23.4432239532471 7289973 24 116.11000000000001 1
22.7106227874756 7289973 24 117.18 1
23.4432239532471 7289973 24 118.13000000000001 1
23.4432239532471 7289973 24 119.13000000000001 1
ContextID
- это продукт, и у меня 1400 различных ContextID, что означает, что у меня 1400 различных продуктов.Я пытаюсь перекрывать и отображать 200 различных ContextID одновременно в одном окне, следующие 200 во втором окне и так далее.В итоге я получаю 7 окон на 1400 товаров.Для достижения того же самого я написал следующий код:
from itertools import zip_longest
def grouper(iterable, n, fillvalue = None):
#Collect data into fixed-length chunks or blocks
#grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
def add_to_axes(ax, data, param, context_id = None):
data.plot(x = "Time_Elapsed", y = param, label = context_id, ax = ax)
outlier = data["iso_forest"] == -1
data[~outlier].plot.scatter(x = "Time_Elapsed", y = param, color = "green", ax = ax)
data[outlier].plot.scatter(x = "Time_Elapsed", y = param, color = "red", ax = ax)
def group_plots(df, param, group_size = 200):
for group in grouper(df.groupby("ContextID"), n = group_size):
fig, ax = plt.subplots()
for context_id, data in filter(None, group):
add_to_axes(ax, data, param, context_id)
ax.legend().set_visible(False)
yield fig
, и когда я делаю
Epvv['plot_data'] = Epvv['merged_df']
for i, fig in enumerate(group_plots(Epvv['plot_data'], 'EscRF_P2P_Volt_V')):
show()
для вышеупомянутого df, он дает мне следующую ошибку:
for i, fig in enumerate(group_plots(Epvv['plot_data'], 'EscRF_P2P_Volt_V')):
show()
Traceback (most recent call last):
File "<ipython-input-10-cdcfbb39cc21>", line 1, in <module>
for i, fig in enumerate(group_plots(Epvv['plot_data'], 'EscRF_P2P_Volt_V')):
File "<ipython-input-1-b8732ccafe84>", line 46, in group_plots
add_to_axes(ax, data, param, context_id)
File "<ipython-input-1-b8732ccafe84>", line 39, in add_to_axes
data[outlier].plot.scatter(x = "Time_Elapsed", y = param, color = "red", ax = ax)
File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 3516, in scatter
return self(kind='scatter', x=x, y=y, c=c, s=s, **kwds)
File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 2942, in __call__
sort_columns=sort_columns, **kwds)
File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 1973, in plot_frame
**kwds)
File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 1740, in _plot
kind=kind, **kwds)
File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 860, in __init__
super(ScatterPlot, self).__init__(data, x, y, s=s, **kwargs)
File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 804, in __init__
raise ValueError(self._kind + ' requires x column to be numeric')
ValueError: scatter requires x column to be numeric
Но, когда я применяю то же самое ко второму df
BacksGas_Flow_sccm ContextID StepID Time_Elapsed iso_forest
1.953125 7289972 1 0.0 1
1.953125 7289972 1 0.055 1
2.05078125 7289972 2 0.156 -1
2.05078125 7289972 2 0.48700000000000004 -1
2.05078125 7289972 2 1.477 -1
1.953125 7289972 2 2.4770000000000003 1
1.7578125 7289972 2 3.4770000000000003 1
1.7578125 7289972 2 4.487 1
1.85546875 7289972 2 5.993 1
1.7578125 7289972 2 6.545000000000001 1
9.08203125 7289972 5 7.9830000000000005 -1
46.6796875 7289972 5 13.093 1
46.6796875 7289972 5 13.384 1
46.6796875 7289972 5 14.388000000000002 1
46.6796875 7289972 5 15.386000000000001 1
46.6796875 7289972 5 16.386000000000003 1
46.6796875 7289972 5 17.396 1
46.6796875 7289972 5 18.406000000000002 1
46.6796875 7289972 5 19.396 1
74.12109375 7289973 19 98.89800000000001 1
74.12109375 7289973 19 99.59800000000001 1
74.12109375 7289973 19 100.488 1
74.90234375 7289973 19 101.798 1
6.4453125 7289973 24 102.49000000000001 -1
3.515625 7289973 24 104.078 -1
2.5390625 7289973 24 104.92800000000001 -1
2.05078125 7289973 24 105.81800000000001 1
2.05078125 7289973 24 106.918 1
2.05078125 7289973 24 107.61000000000001 1
1.953125 7289973 24 108.65 1
и выполняю
Bgf['plot_data'] = Bgf['merged_df']
for i, fig in enumerate(group_plots(Bgf['plot_data'], 'BacksGas_Flow_sccm')):
show()
, он прекрасно работает без каких-либо ошибок и дает мне 7 разных окон, каждоеимея график времени 200 различных продуктов.
Я также проверил тип данных обоих фреймов данных, и они были одинаковыми:
print(Bgf['plot_data'].dtypes)
BacksGas_Flow_sccm float64
ContextID object
StepID object
Time_Elapsed float64
iso_forest object
dtype: object
print(Epvv['plot_data'].dtypes)
EscRF_P2P_Volt_V float64
ContextID object
StepID object
Time_Elapsed float64
iso_forest object
dtype: object
Я не понимаю, в чем заключается ошибка, яделать здесь, так как код работает для одного df и не работает для другого.Любая помощь будет оценена.
Спасибо