Python 基于那里';时间戳';和';id';另一个数据帧的
我想看看客户最后给出的金额是多少。最后一次按客户销售 我有两个数据帧: DF1: DF2: 我需要这个输出:Python 基于那里';时间戳';和';id';另一个数据帧的,python,dataframe,Python,Dataframe,我想看看客户最后给出的金额是多少。最后一次按客户销售 我有两个数据帧: DF1: DF2: 我需要这个输出: +----------+-----------+---------------+----------------+ | ID| num_sale| last_sale_time|last_sale_amount| | 11111111| 2| 2014-05-02| 30| | 33333333|
+----------+-----------+---------------+----------------+
| ID| num_sale| last_sale_time|last_sale_amount|
| 11111111| 2| 2014-05-02| 30|
| 33333333| 1| 2017-08-02| 12|
| 22222222| 3| 2017-08-02| 80|
+----------+-----------+---------------+----------------+
我想做的是:
last_sale_amount= []
for index, row in df.iterrows():
try:
last_sale_amount= max(df2.loc[df['id'] == row['f_id'], 'last_sale_time'])
print(str(last_sale_amount))
num_attempt.append(last_sale_amount)
except KeyError:
last_sale_amount.append(0)
ad['last_sale_amount'] = last_sale_amount
您可以使用groupby从每个列中获取最长销售时间,然后合并回df1和df2中的信息
df_maxsale=df1.groupby('ref_ID')['Sale time'].max().to_frame().reset_index())\
.merge(df1,how='left',on=['ref_ID','Sale time'])\
.merge(df2,how='left',left'u在='ref'u ID'上,right'u在='ID'上)
注意:
.max()
返回一个以ref\u ID
作为索引的序列,因此您需要调用到\u frame()。重置\u index()
以便ref\u ID
是一列,您可以在其上合并Sale time
我们可以使用group by和已排序的sales time并将最后一行带到那里
df1 = df1 .sort_values('Sale time').groupby('ref_ID').last().reset_index()
然后将其与数据帧2(df2)合并
您确定所需的输出反映了正确的输出吗?基于
DF1
的11111111
的上次销售时间不应该是2014-05-02
和2222222
的2017-08-02
吗?对不起,发帖时出错了。现在我更新它
last_sale_amount= []
for index, row in df.iterrows():
try:
last_sale_amount= max(df2.loc[df['id'] == row['f_id'], 'last_sale_time'])
print(str(last_sale_amount))
num_attempt.append(last_sale_amount)
except KeyError:
last_sale_amount.append(0)
ad['last_sale_amount'] = last_sale_amount
df1 = df1 .sort_values('Sale time').groupby('ref_ID').last().reset_index()
df2= df2.merge( df1, left_on = "ID", right_on = "ref_ID", how="left" )