我有以下代码:
for tup in unique_tuples:
user_review = reviews_prior_to_influence_threshold[(reviews_prior_to_influence_threshold.business_id == tup[0]) & (reviews_prior_to_influence_threshold.user_id == tup[1])]
for friend in tup[2]:
friend_review = reviews_prior_to_influence_threshold[(reviews_prior_to_influence_threshold.business_id == tup[0]) & (reviews_prior_to_influence_threshold.user_id == friend)]
if (friend_review.date - user_review.date) <= 62:
tup[2].remove(friend)
我从元组列表中提取值并将它们与数据帧中的列中的值匹配,然后屏蔽该值等于true的行。
user_review_mask是一行,表示用户对业务所做的审核。 friend_review掩码也是一行,表示用户的朋友所做的评论。
tup [2]是tup [1]中user_id的friend_id列表。所以我循环遍历用户的每个朋友,然后将该friend_id与他对业务的评论相匹配。
基本上我希望看看,对于2个不同用户的2个不同的评论,friend_review.date和user_review.date之间的差异是&lt; = +2个月。如果差异不少于2个月,我想从tup [2]列表中删除friend_id。
两个数据帧/行中的日期都是数据类型datetime64 [ns],每个日期的格式都是“yyyy-mm-dd”,所以我想我可以轻松地减去它们,看看是否有评论之间的差异小于2个月。
但是,我一直收到以下错误:
TypeError: invalid type comparison
它还提到Numpy不喜欢比较而不是“None”,我也有点困惑,因为我的专栏中没有空值。
更新:解决方案 结束后附加到新列表而不是从当前列表中删除,但这可行。
#to append tuples
business_reviewer_and_influenced_reviewers = []
#loop through each user and create a single row df based on a match from the reviews df and our tuple values
for tup in unique_tuples:
user_review_date = reviews_prior_to_influence_threshold.loc[(reviews_prior_to_influence_threshold.business_id == tup[0]) &
(reviews_prior_to_influence_threshold.user_id == tup[1]), 'date']
user_review_date = user_review_date.values[0]
#loop through list each friend of the reviewer that also reviewed the business in tup[2]
for friend in tup[2]:
friend_review_date = reviews_prior_to_influence_threshold.loc[(reviews_prior_to_influence_threshold.business_id == tup[0]) &
(reviews_prior_to_influence_threshold.user_id == friend), 'date']
friend_review_date = friend_review_date.values[0]
diff = pd.to_timedelta(friend_review_date - user_review_date).days
#append business_id, reviewer, and influenced_reviewer as a tuple to a list
if (diff >= 0) and (diff <= 62):
business_reviewer_and_influenced_reviewers.append((tup[0], tup[1], friend))
答案 0 :(得分:0)
您的数据框中的日期可能不是 datetime64 dtype
个实例,因此invalid type comparison
。您可以查看df.dtypes
。如果这是真的,请使用df.date = pd.to_datetime(df.date)
。
您的数据框中可能有一些null
的日期,因此比较与#34;无&#34;。使用df[pd.notnull(df.dates)]
。
顺便说一句:减去日期会让你timedelta
,所以你可能需要做(friend_review.date - user_review.date).dt.days <= 62
之类的事情。