如何遍历for循环中的熊猫行

时间:2018-12-07 08:56:52

标签: python pandas

我在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有1000多行,而df2只有4行

例如 dates中有2个唯一的df1,带有两个唯一的乘积MSHS。所以我想比较我想过滤日期和产品01-01-2018 & MS行,然后用df2

与相同的日期和时间进行比较

我目前也正在使用for循环

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_datedf2_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_productsdf2的范围,我该怎么办?

1 个答案:

答案 0 :(得分:2)

我认为您需要:

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]来访问数据框,依此类推...