gpt4 book ai didi

python - 获取行 b_1 减去行 b_2 的差值最小的行 a

转载 作者:行者123 更新时间:2023-12-01 04:06:55 24 4
gpt4 key购买 nike

我有一个像这样的 Pandas 数据框:

a     b
1 4.5
1 5.1
2 6.2
2 6.4
3 7.1
3 3.2
4 0
4 0

对于每个 'a' 值,有两个数据帧行。我想获得 'a' 值,其中 abs(b1-b2) 最小。编辑:另外,我想忽略两个 'a' 条目都有 'b=0' 的情况。

使用 Pandas 可以轻松实现这一点吗?

最佳答案

IIUC 那么你可以 groupby在“a”上调用 diffabs要返回值对之间的绝对差,您可以使用 idxmin 获取索引:

In [127]:
df.loc[df.groupby('a')['b'].diff().abs().idxmin()]

Out[127]:
a 2.0
b 6.4
Name: 3, dtype: float64

中间步骤和输出是:

In [128]:
df.groupby('a')['b'].diff()

Out[128]:
0 NaN
1 0.6
2 NaN
3 0.2
4 NaN
5 -3.9
dtype: float64

In [129]:
df.groupby('a')['b'].diff().abs()

Out[129]:
0 NaN
1 0.6
2 NaN
3 0.2
4 NaN
5 3.9
dtype: float64

In [130]:
df.groupby('a')['b'].diff().abs().idxmin()

Out[130]:
3

编辑

要处理有 2 个 0 值的情况,您必须将它们过滤掉,本质上是执行双重分组:

In [157]:
df.loc[df[df['a'].isin(df.loc[df.groupby('a')['b'].diff().abs() > 0,'a'])].groupby('a')['b'].diff().abs().idxmin()]

Out[157]:
a 2.0
b 6.4
Name: 3, dtype: float64

关于python - 获取行 b_1 减去行 b_2 的差值最小的行 a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35434133/

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