【发布时间】:2021-03-21 07:55:46
【问题描述】:
基本上我试图回答这个问题:“客户从 X 日期起最近的 4 个订单是什么......”但问题是我试图对按电子邮件日志排序的表中的每一行执行此操作并且有一个唯一的日期。
所以我必须查看这些电子邮件日志 (df1) 中的每个日期,找出 df1 中的 agent_id 是否与 agent_id df2(订单历史记录)匹配,然后从 df2 中提取最近的 4 个订单。 IE:客户端 123 在 3 月 3 日(df1)收到一封电子邮件......然后我需要在 df2 中提取客户端 123 的 4 个最新条目,这些条目等于或小于日期(3 月 3 日)。
我想出了这个杂乱无章的功能,但在循环超过 1000 行时它并不实用……有什么想法可以扩大它吗?
谢谢,
df1 = pd.DataFrame({'unique_col': ['a', 'b', 'c', 'd'], 'agent_id': [1, 2, 3, 4], 'created_at_email': ['1/5/2020', '1/6/2020', '1/8/2020', '1/8/2020']})
df2 = pd.DataFrame({'unique_col': ['a', 'b', 'c', 'd'], 'agent_id': [1, 1, 3, 1], 'created_at': ['1/4/2020', '1/5/2020', '1/6/2020', '1/9/2020']})
# note: super not optimized at all...
def function():
for index, row in df1.iterrows():
for index, row2 in df2.iterrows():
if row['agent_id'] == row2['agent_id']:
if row2['created_at'] <= row['created_at_email']:
print( 1, row2['created_at'], row['created_at_email'], row2['agent_id'], row['agent_id'], row['unique_col'], row2['unique_col'])
else:
print( 0, row2['created_at'], row['created_at_email'], row2['agent_id'], row['agent_id'], row['unique_col'], row2['unique_col'])
#else:
#print( 0, row2['created_at'], row['created_at_email'], row2['agent_id'], row['agent_id'])
function()
output:
1 1/4/2020 1/5/2020 1 1 a a
1 1/5/2020 1/5/2020 1 1 a b
0 1/9/2020 1/5/2020 1 1 a d
1 1/6/2020 1/8/2020 3 3 c c
【问题讨论】:
标签: python-3.x pandas numpy dataframe jupyter-notebook