Измените жесткий код на более гибкий, используя python for loop - PullRequest
0 голосов
/ 04 апреля 2020

Я пишу код о заговоре. Я пишу hardcode способами, поэтому мой код недостаточно гибок.

Я знаю, можно использовать для l oop для решения проблем hardcode . Но моя способность Python недостаточно сильна.

Вот мой код.

df1 = df[df.cluster==0]
df2 = df[df.cluster==1]
df3 = df[df.cluster==2]

plt.scatter(df1.Age,df1['Income($)'],color='green')
plt.scatter(df2.Age,df2['Income($)'],color='red')
plt.scatter(df3.Age,df3['Income($)'],color='black')

В этом случае есть 3 кластера. Если кластер = 4, то нужно писать больше. df4 = ...

Могу ли я написать для l oop, например, вот так:

n = number of cluster
for i in range(n):
    df(random) = df[df.cluster==i]
for j in range(n):
    plt.scatter(df(n).Age,df(n)['Income($)'],color='RANDOM')

Мой вопрос заключается в том, чтобы написать код только в несколько строк без использования жестких кодов.

Ответы [ 3 ]

3 голосов
/ 04 апреля 2020

Если вы ищете простое решение, это может быть оно. (Я повторно использовал ваш пример кода)

n = num_of_clusters
my_colors = ['green', 'red', 'black', ...]
for i in range(n):
    df_i = df[df.cluster == i]
    plt.scatter(df_i.Age, df_i['Income($)'], color=my_colors[i])
2 голосов
/ 04 апреля 2020

Одна возможность:

colors = ['green', 'red', 'black']

for i in range(3):
    df_temp = df[df.cluster==i]
    plt.scatter(df_temp.Age, df_temp['Income($)'], color=colors[i])
2 голосов
/ 04 апреля 2020

Это классическая c операция «groupby» в pandas.

Посмотрите на некоторые сообщения об использовании groupby. Вы можете ...

  • использовать groupby для создания групп на основе значения кластера
  • Использовать for-l oop до l oop для групп и ...
  • построение каждой группы в контейнере групп.

Вот пример использования groupby

In [57]: from matplotlib import pyplot as plt                                   

In [58]: import pandas as pd                                                    

In [59]: data = {'year':[1976, 1979, 1982, 1978, 1982], 'income':[200, 170, 100,
    ...:  50, 120], 'cluster': [1, 1, 1, 2, 2]}                                 

In [60]: df = pd.DataFrame(data)                                                

In [61]: df                                                                     
Out[61]: 
   year  income  cluster
0  1976     200        1
1  1979     170        1
2  1982     100        1
3  1978      50        2
4  1982     120        2

In [62]: for label, df in df.groupby('cluster'): 
    ...:     plt.plot(df['year'], df['income'], label=label) 
    ...:                                                                        

In [63]: plt.legend()                                                           
Out[63]: <matplotlib.legend.Legend at 0x7fe792601e80>

In [64]: plt.show() 

:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...