Изменить столбец на основе выбора с al oop, с python - PullRequest
0 голосов
/ 30 мая 2020

У меня есть несколько точек с соответствующими координатами, которые мне нужно сгруппировать. Я хочу сделать al oop, в котором выполняется несколько вариантов выбора, и в зависимости от выбора таблица столбца изменяется со значением индекса.

Но это не работает для меня, и я не знаю, что делаю не так. Большое спасибо за вашу помощь.

import numpy
import pandas
df = pandas.DataFrame({'Name':['A', 'b', 'A', 'c', 'A', 'd', 'e', 'f', 'g', 'h'], 
    'X':[150, 110, 150, 150, 250, 280, 180, 120, 240, 170], 
    'Y':[300, 250, 100, 50, 200, 120, 220, 30, 130, 40]})

# Sort table by column values
df = df.sort_values(['Y'], ascending=[False])

# Re-create index
df = df.reset_index(drop=True)

# Interval creation on X axis
df['X_Previous'] = numpy.where(df['Name'] == 'A', (df['X'] - 50), numpy.nan)
df['X_Later'] = numpy.where(df['Name'] == 'A', (df['X'] + 50), numpy.nan)

# Creation of column 'Table', to fill it later
df['Table'] = numpy.nan
df

  Name    X    Y  X_Previous  X_Later  Table
0    A  150  300       100.0    200.0    NaN
1    b  110  250         NaN      NaN    NaN
2    e  180  220         NaN      NaN    NaN
3    A  250  200       200.0    300.0    NaN
4    g  240  130         NaN      NaN    NaN
5    d  280  120         NaN      NaN    NaN
6    A  150  100       100.0    200.0    NaN
7    c  150   50         NaN      NaN    NaN
8    h  170   40         NaN      NaN    NaN
9    f  120   30         NaN      NaN    NaN

L oop (foor in)

# List creation with index
lista_index = df.index[df['Name'].isin(['A'])]
lista_index

# Creation of a loop to fill the column, depending on the classification
for i in lista_index:
    df['Table'] = numpy.where(df[(df['X'] >= (df.loc[i, 'X_Previous'])) 
        & (df['X'] <= (df.loc[i, 'X_Later'])) 
        & (df['Y'] <= (df.loc[i, 'Y']))], [i], df['Table'])

Ошибка, которая дает мне:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "<__array_function__ internals>", line 6, in where
ValueError: operands could not be broadcast together with shapes (7,6) () (10,)

Заключительный фрейм данных должен выглядеть так:

  Name    X    Y  X_Previous  X_Later  Table
0    A  150  300       100.0    200.0    0
1    b  110  250         NaN      NaN    0
2    e  180  220         NaN      NaN    0
3    A  250  200       200.0    300.0    3
4    g  240  130         NaN      NaN    3
5    d  280  120         NaN      NaN    3
6    A  150  100       100.0    200.0    6
7    c  150   50         NaN      NaN    6
8    h  170   40         NaN      NaN    6
9    f  120   30         NaN      NaN    6

Точечный рисунок, для лучшего понимания

import matplotlib.pyplot as plt
Drawing = df.plot('X', 'Y', marker="o", kind="scatter")
plt.show(Drawing)

enter image description here

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