gpt4 book ai didi

python - 如何删除groupby的最后一行

转载 作者:行者123 更新时间:2023-12-01 22:56:25 27 4
gpt4 key购买 nike

我正在尝试处理以下数据框。

import pandas as pd
import numpy as np

df = pd.DataFrame({'ID':[1,1,2,2,2,3,3,3,3],
'sum':[1,1,1,2,3,1,4,4,4],
'flg':[1,np.nan, 1, np.nan, np.nan, 1, 1, np.nan, np.nan],
'year':[2018, 2019, 2018, 2019, 2020, 2018, 2019, 2020, 2021]})

df['diff'] = df.groupby('ID')['sum'].apply(lambda x: x - x.iloc[-1])

enter image description here

“差异”是与每个 ID 最后一年的“总和”的差异。

所以,我尝试了以下代码来删除用于比较的最后一年行。

comp = df.groupby('ID').last().reset_index()
col = list(df.columns)
fin =pd.merge(df, comp, on=col, how='outer', indicator=True).query(f'_merge != "both"')

但这就是问题所在。

'comp'的内容如下。

enter image description here

我原本想得到的'comp'如下。

ID sum flg year diff
1 1 Nan 2019 0
2 3 Nan 2020 0
3 4 Nan 2021 0

为什么'flg'中的Nan会自己补1?如果有更好的方法,请告诉我。

最佳答案

IIUC,使用head(-1):

g = df.groupby('ID')

out = g.head(-1).assign(diff=g['sum'].apply(lambda x: x - x.iloc[-1]))

输出:

   ID  sum  flg  year  diff
0 1 1 1.0 2018 0
2 2 1 1.0 2018 -2
3 2 2 NaN 2019 -1
5 3 1 1.0 2018 -3
6 3 4 1.0 2019 0
7 3 4 NaN 2020 0

变体:

g = df.groupby('ID')

out = g.head(-1).assign(diff=lambda d: d['sum'].sub(g['sum'].transform('last')))

关于python - 如何删除groupby的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73133044/

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