我有两个 Dataframe DF1和DF2
df1 =
id start end
a 1/12/2022 18/12/2022
a 19/12/2022 25/12/2022
a 26/12/2022 31/12/2022
b 01/12/2022 20/12/2022
b 21/12/2022 31/12/2022
c 01/12/2022 31/12/2022
d 01/12/2022 15/12/2022
d 16/12/2022 31/12/2022
和第二 Dataframe 作为
DF2
id start_2 end_2 number
a 15/12/2022 15/12/2022 1
b 17/12/2022 19/12/2022 3
b 25/12/2022 27/12/2022 2
c 12/12/2022 12/12/2022 1
d 03/12/2022 04/12/2022 2
d 25/12/2022 25/12/2022 1
我想按ID合并两个 Dataframe 左连接(df1和df2)。并调整df1中相同日期范围(开始和结束日期)中的列"编号"。例如,如果在df2中,ID "a"的编号为1,则它应出现在"a"的第一行(1/12/2022至18/12/2022),而不是其他插槽中。其他插槽应为零。如下所示
结果df
id start end number
a 1/12/2022 18/12/2022 1
a 19/12/2022 25/12/2022 0
a 26/12/2022 31/12/2022 0
b 01/12/2022 20/12/2022 3
b 21/12/2022 31/12/2022 2
c 01/12/2022 31/12/2022 1
d 01/12/2022 15/12/2022 2
d 16/12/2022 31/12/2022 1
注意,如果两个数字位于df1的同一插槽中,则应进行groupby求和。
3条答案
按热度按时间nhn9ugyo1#
这是一个变通方法。合并后,设置
start
和end
条件,然后充分利用.loc
和groupby
输出:
z3yyvxxp2#
可以将concat和groupby与size()方法一起使用。
rryofs0p3#
您可以在
id
上合并,然后过滤出您的列表:输出: