python - Pandas 数据框问题。创建列,其中行单元格获取另一个行单元格的值

标签 python pandas loops dataframe operation

我有这个 pandas 数据框。它按“h”列排序。我想要的是添加两个新列,其中: 每个区域的项目都有一个最大边界和一个最小边界。 (对于该区域中的每个项目,它们都是相同的)。最大边界将是前一个区域的最小“h”值,最小边界将是下一个区域的最大“h”值

name    h   w   set row zone
ZZON5   40  36  A   0   0
DWOPN   38  44  A   1   0
5SWYZ   37  22  B   2   0
TFQEP   32  55  B   3   0
OQ33H   26  41  A   4   1
FTJVQ   24  25  B   5   1
F1RK2   20  15  B   6   1
266LT   18  19  A   7   1
HSJ3X   16  24  A   8   2
L754O   12  86  B   9   2
LWHDX   11  68  A   10  2
ZKB2F   9   47  A   11  2
5KJ5L   7   72  B   12  3
CZ7ET   6   23  B   13  3
SDZ1B   2   10  A   14  3
5KWRU   1   59  B   15  3

我的希望:

name    h   w   set row zone maxB minB
ZZON5   40  36  A   0   0         26
DWOPN   38  44  A   1   0         26
5SWYZ   37  22  B   2   0         26
TFQEP   32  55  B   3   0         26
OQ33H   26  41  A   4   1    32   16
FTJVQ   24  25  B   5   1    32   16
F1RK2   20  15  B   6   1    32   16
266LT   18  19  A   7   1    32   16
HSJ3X   16  24  A   8   2    18   7
L754O   12  86  B   9   2    18   7
LWHDX   11  68  A   10  2    18   7
ZKB2F   9   47  A   11  2    18   7
5KJ5L   7   72  B   12  3    9  
CZ7ET   6   23  B   13  3    9
SDZ1B   2   10  A   14  3    9
5KWRU   1   59  B   15  3    9  

有什么想法吗?

最佳答案

首先按区域分组并找到其中的最小值和最大值

min_max_zone = df.groupby('zone').agg(min=('h', 'min'), max=('h', 'max'))

现在您可以使用应用:

df['maxB'] = df['zone'].apply(lambda x: min_max_zone.loc[x-1, 'min'] 
                               if x-1 in min_max_zone.index else np.nan)

df['minB'] = df['zone'].apply(lambda x: min_max_zone.loc[x+1, 'max']             
                               if x+1 in min_max_zone.index else np.nan)

关于python - Pandas 数据框问题。创建列,其中行单元格获取另一个行单元格的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60891442/

相关文章:

python - 如何在 Mac OS X 上的 Python 交互式 shell 中输入英镑字符 (£)?

python - 合并与函数输出相关的 Pandas 数据帧

java - 如何从数组中计算唯一的 "mode"?

python - 在循环中构建图形时 Tensorflow 内存泄漏

python - 如何为用户设置权限

python - Pandas :处理缺失的列

python - 在列表中值的不同列标题中打印值

python - 根据另一个数据帧的范围从数据帧中选择最小值

c# - 子列表项未在 C# 中显示

c++ - while 循环比 for 循环更有效。可能是什么原因?