我在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
,带有两个唯一的乘积MS
和HS
。所以我想比较我想过滤日期和产品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_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
的范围,我该怎么办?
答案 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]
来访问数据框,依此类推...