Итерация по pandas фрейму данных с несколькими условиями - PullRequest
0 голосов
/ 02 мая 2020

enter image description here

Итак, у меня есть этот фрейм данных, который содержит позиции разных точек, X, Y, Z и несколько других свойств. Затем, у меня есть еще один disctionary называется path (), который содержит различные точки, которые образуют траекторию. Эти точки включены в кадр данных.

По причинам, связанным с графиком, я хочу установить столбец "путь" равным 2 ТОЛЬКО для точек, которые находятся в пути (). Как определить, какие точки кадра данных находятся на этом пути, и изменить их атрибут «путь»?

Уточнение:

Путь примерно такой:

path = {12, 34, 14}

, а pos {} дает [x, y, z] для каждого узла пути

pos = {12: [3, 4, 2], 34: [1, 3, 4], 14: [5, 4, 5]}

где [3, 4, 2] = [x, y, z] как те, что в кадре данных. Поэтому я хочу изменить столбец «путь» в кадре данных с 1 на 2 для позиций в кадре данных, которые соответствуют этому. Так, например, если для 14: [5, 4, 55] есть строка в кадре данных с X = 5, Y = 4 и Z = 55, я хочу, чтобы эта строка имела путь = 2.

Это то, что я пытался, и я думаю, что это должно работать, но это не так. Я пытаюсь отфильтровать позицию, а затем соответствующим образом изменить фрейм данных.

(здесь я пытаюсь изменить значение с 0 на 1 вместо 1 на 2, потому что изображение df, которое я вам дал, было изменено при попытке этого, но игнорировать его)

df['path'] = np.zeros(len(df.index))

filt1 = (df['eventID'] == 98)
df_path = df[filt1]

for node in path:

     A, B, C = pos[node]
     filt2 = (df['X'] == A) & (df['Y'] == B) & (df['Z'] == C)

     df_path[filt2]['path'].replace({0:1})

Кроме того, я получаю это предупреждение:

UserWarning:

Boolean Series key will be reindexed to match DataFrame index.

Извините, если я "нарушаю" некоторые недовольные правила, я новичок здесь. Большое спасибо

Алекс

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

решено!

df['path'] = np.zeros(len(df.index))

filt1 = (df['eventID'] == 98)
df_path = df[filt1]

for node in path:

   A, B, C = pos[node]
   filt2 = (df['X'] == A) & (df['Y'] == B) & (df['Z'] == C)

   df_path['path'].loc[filt2] = 1
0 голосов
/ 02 мая 2020

1. найдите ключ , используя этот , который вы хотите из словаря

>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> # keys and values are iterated over in the same order (insertion order)
>>> list(keys)
['eggs', 'sausage', 'bacon', 'spam']

2. Теперь для изменения замените атрибут пути , используя этот

df = pd.DataFrame({"column1": ["a", "b", "a"]})
print(df)
OUTPUT
  column1
0       a
1       b
2       a

df["column1"].replace({"a": "x", "b": "y"}, inplace=True)
print(df)
OUTPUT
  column1
0       x
1       y
2       x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...