gpt4 book ai didi

Python 根据另一个数据帧中的匹配行将部分行移动到上一行

转载 作者:行者123 更新时间:2023-12-03 07:52:26 27 4
gpt4 key购买 nike

我有两个数据框df1:

    Name Month  Amount  Status
0 Bill Apr 0
1 Bill May 0
2 Bill Jun 100 member
3 Sally Apr 0
4 Sally May 0
5 Sally Jun 200 member
6 Tom Apr 0
7 Tom May 300 member
8 Tom Jun 0

df2:

   Name Month
0 Bill Jun
1 Tom May

只要 df2 中的名称和月份匹配,我就会更新 df1,并将金额和状态移至上个月。可以假设每个人总是有一个上个月要移动到,并且行已经按姓名和月份按正确的顺序排列。预期结果如下:

    Name Month  Amount  Status
0 Bill Apr 0
1 Bill May 100 member
2 Bill Jun 0
3 Sally Apr 0
4 Sally May 0
5 Sally Jun 200 member
6 Tom Apr 300 member
7 Tom May 0
8 Tom Jun 0

我相信有一种方法可以使用 itterows() 来做到这一点,但是这里有更直接的方法吗?

最佳答案

尝试:

# merge to find rows with Name, Month in df2
exist = df1[['Name','Month']].merge(df2.assign(exist=1), how='left')['exist'].notna()

# find the previous rows
prev_rows = exist.groupby(df1['Name']).shift(-1, fill_value=False)

# fill the previous rows
df1.loc[prev_rows, ['Amount','Status']] = df1.loc[exist, ['Amount','Status']].to_numpy()

# remove the given rows
df1.loc[exist, ['Amount','Status']] = [0, None]

输出:

    Name Month  Amount  Status
0 Bill Apr 0 None
1 Bill May 100 member
2 Bill Jun 0 None
3 Sally Apr 0 None
4 Sally May 0 None
5 Sally Jun 200 member
6 Tom Apr 300 member
7 Tom May 0 None
8 Tom Jun 0 None

关于Python 根据另一个数据帧中的匹配行将部分行移动到上一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76843614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com