как перебрать строку панд в цикле for - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть два кадра данных в r

 df1 
 code     date          time       prod    price
 123      01-01-2018    06:11:00   MS      12
 123      01-01-2018    06:16:12   HS      13
 123      01-01-2018    06:17:12   HS      13
 123      01-01-2018    06:19:00   MS      12
 123      02-01-2018    06:17:12   HS      13
 123      02-01-2018    06:19:00   MS      12

 df2
 code     date         prod      price
 123      01-01-2018   MS        12
 123      01-01-2018   HS        13
 123      02-01-2018   HS        13

Я хочу отфильтровать строки из df1 и df2 с уникальными датами в df1.my df1 имеет более 1000 строк, а df2 имеет только 4 строки

, например, есть 2 уникальных dates в df1 с двумя уникальными продуктами MS и HS.Поэтому я хочу сравнить, например, я хочу отфильтровать строки даты и результата 01-01-2018 & MS, а затем сравнить с той же датой и временем с df2

, который я в настоящее время использую для цикла аналогично

unique_dates = iss_trans_268559['transaction_date'].unique()   
unique_dates.sort()
unique_products = iss_trans_268559['prodcode'].unique()

for i in range(len(unique_dates)):
   current_date = df1[(df1['date'] == unique_dates[i]) & df1['prod'] == unique_products[i] 
   df2_current = df2[df2['date'] == unique_dates[i]]

Я должен получить данные цикла ниже для цикла for, а затем я могу сравнить даты в current_date и df2_current

current_date
 code     date          time       prod    price
 123      01-01-2018    06:11:00   MS      12
 123      01-01-2018    06:19:00   MS      12

 df2_current 
 code     date         prod      price
 123      01-01-2018   MS        12

Проблема в вышеприведенном цикле: i выйдет за пределы unique_productsи df2 Как я могу это сделать?

1 Ответ

0 голосов
/ 07 декабря 2018

Я думаю, вам нужно:

dates= df1['date'].unique()
prods = df1['prod'].unique()

import itertools

comb = list(itertools.product(dates, prods))
# [('01-01-2018', 'MS'), ('01-01-2018', 'HS'), ('02-01-2018', 'MS'), ('02-01-2018', 'HS')]

current_date = []
df2_current = []

for i,j in comb:
    current_date.append(df1[(df1['date']==i) & (df1['prod']==j)])
    df2_current.append(df2[(df2['date']==i) & (df2['prod']==j)])

Вы можете получить доступ к кадрам данных, используя current_date[0] и df2_current[0] и т. Д. ...

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