У меня есть несколько точек с соответствующими координатами, которые мне нужно сгруппировать. Я хочу сделать 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)