【发布时间】:2021-06-16 09:52:43
【问题描述】:
我有 2 个数据框:
df_1
product_id qty_received date_received
a_1 62 2021-06-11
a_2 30 2021-06-11
a_3 30 2021-06-11
a_4 1 2021-05-24
a_5 1 2021-05-24
a_1 20 2021-05-23 # repeating product_id
df_2
product_id
a_1
b_2
c_4
a_3
a_5
e_5
我正在尝试从df_1 加入qty_received 和最后一个date_received 到df_2,以便结果如下所示:
product_id last_receive qty_received
a_1 2021-06-11 62
b_2 No information 0
c_4 No information 0
a_3 2021-06-11 30
a_5 2021-05-24 1
e_5 No information 0
我尝试过的:
df_2.merge(df_1, on='product_id', how='left')
但是由于某种原因,这会增加总行数,我知道它可能会创建新行,因为在df_1 中有不止一个相同的product_id,但在df_2 中没有。
然后我尝试将其分组并取max date_received:
df_1.groupby(['product_id'])['date_received', 'qty_received'].max().reset_index()
但这会返回date_received 和qty_received 的最大值,而不是max date_received 的qty_received。
如何过滤掉最大的date_received 并获得该日期的product_id qty_received?如果我想获得最后 2 个日期,以便在每个产品的第二高 date_received 中再增加 2 个列 second_last_received 和 second_qty_received,该怎么办?
所以结果是:
product_id last_receive qty_received second_last_receive second_qty_received
a_1 2021-06-11 62 2021-05-23 20
b_2 No information 0 No information No information
c_4 No information 0 No information No information
a_3 2021-06-11 30 No information No information
a_5 2021-05-24 1 No information No information
e_5 No information 0 No information No information
【问题讨论】:
-
您只需要最后一行和最后一行?
-
我需要 2 个最后一个日期,对应的
qty_received。 -
当然,所以应该删除另一个?如果有第 3 个,第 4 个...