Условно для цикла в питоне - PullRequest
0 голосов
/ 09 января 2019

У меня есть два DataFrames: dfSide0 и dfSide1, которые имеют одинаковые столбцы, но разное количество строк. dfSide0 имеет 17096 строк, а dfSide1 - 4961 строк. Что я хочу сделать, это получить минимум всех возможных вычитаний между значениями dfSide0['distoperator'] и dfSide1['distoperator'], но только если условие dfSide0['camera_row'] == dfSide1['camera_row'] истинно.

Поэтому я делаю следующее:

temp = []
for i in dfSide0['distoperator']:
    if dfSide0['camera_row'] == dfSide1['camera_row']:
        c = min(abs(i - dfSide1['distoperator']))
        temp.append(c)

и я получаю следующую ошибку:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-225-625fcefe40b7> in <module>()
      1 temp = []
      2 for i in dfSide0['distoperator']:
----> 3     if dfSide0['camera_row'] == dfSide1['camera_row']:
      4         c = min(abs(i - dfSide1['distoperator']))
      5         temp.append(c)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\ops.py in wrapper(self, other, axis)
   1188 
   1189         elif isinstance(other, ABCSeries) and not self._indexed_same(other):
-> 1190             raise ValueError("Can only compare identically-labeled "
   1191                              "Series objects")
   1192 

ValueError: Can only compare identically-labeled Series objects

Что мне делать?

Ответы [ 3 ]

0 голосов
/ 09 января 2019

если я сделаю это:

temp = []
for i in dfSide0['distoperator']:
    if dfSide0['camera_row'] == dfSide1['camera_row']:
        c = min(abs(i - dfSide1['distoperator']))
        temp.append(c)

Я получаю следующее:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-222-625fcefe40b7> in <module>()
      1 temp = []
      2 for i in dfSide0['distoperator']:
----> 3     if dfSide0['camera_row'] == dfSide1['camera_row']:
      4         c = min(abs(i - dfSide1['distoperator']))
      5         temp.append(c)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\ops.py in wrapper(self, other, axis)
   1188 
   1189         elif isinstance(other, ABCSeries) and not self._indexed_same(other):
-> 1190             raise ValueError("Can only compare identically-labeled "
   1191                              "Series objects")
   1192 

ValueError: Can only compare identically-labeled Series objects

без оператора if работает нормально.

0 голосов
/ 10 января 2019

Я думаю, что нашел ответ:

temp = []
k = -1
for i in dfSide0['distoperator']:
    k = k+1
    j = dfSide0.index[k]
    c = min(abs(i - dfSide1['distoperator'][dfSide1['camera_row'] == dfSide0['camera_row'][j]]))
    temp.append(c)

Кажется, работает!

0 голосов
/ 09 января 2019

Спасибо за ваш быстрый ответ. Чтобы сделать вещи более понятными: Оба dfSide0 и dfSide1 имеют два столбца: «расстояние», которое является плавающей точкой, и «camera_row», который представляет собой строку со значениями «a», «b», «c», «d», «e» и «f» У dfSide0 17096 строк, а у dfSide1 4961 строк. Мне нужно вычесть все значения в столбце «расстояние» между двумя кадрами данных и найти минимум, но только тогда, когда значение в столбце «camera_row» совпадает. Точный код пока что следующий:

temp = []
for i in dfSide0['distance']:
    c = min(abs(i - dfSide1['distance']))
    temp.append(c)

и это работает, но я не нашел способа сделать это для цикла, только когда

dfSide0['camera_row'] == dfSide1['camera_row']

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