Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于那里';时间戳';和';id';另一个数据帧的_Python_Dataframe - Fatal编程技术网

Python 基于那里';时间戳';和';id';另一个数据帧的

Python 基于那里';时间戳';和';id';另一个数据帧的,python,dataframe,Python,Dataframe,我想看看客户最后给出的金额是多少。最后一次按客户销售 我有两个数据帧: DF1: DF2: 我需要这个输出: +----------+-----------+---------------+----------------+ | ID| num_sale| last_sale_time|last_sale_amount| | 11111111| 2| 2014-05-02| 30| | 33333333|

我想看看客户最后给出的金额是多少。最后一次按客户销售

我有两个数据帧: DF1:

DF2:

我需要这个输出:

+----------+-----------+---------------+----------------+
|        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" )