使用不同条件为奇数行和偶数行在pandas数据帧中生成新列

2024-06-25 22:39:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下熊猫数据帧:

     A       B
0   16.3    1.10
1   23.2    1.33
2   10.7   -0.43
3   5.7    -2.01
4   5.4    -1.86
5   23.5    3.14

我想要完成的是通过比较两个相邻行中a列中的值来生成第三列,并对下两行执行相同的操作,依此类推。在

这可能有点令人困惑,所以我举个例子:

  • 对于第一行,如果16.3 - 23.2 < 5,那么新列C的第一行的值应该是Bad,如果这个差是==5,那么新列应该是Decent,如果差值是>5,那么新列应该是{}
  • 对于第二行,应用相同类型的逻辑,但使用23.2 - 16.3,并根据该差异为该行生成C的值
  • 对第3行和第4行执行相同的操作,将第5行和第6行作为一对,依此类推

因此,生成的数据帧应如下所示:

^{pr2}$

我看了一下,发现你可以定义一个函数,它返回不同的状态,然后使用数据框应用. 在

所以我想也许可以创建两个函数:一个用于将A的值与下一行进行比较的奇数行,另一个用于将其与前一行进行比较的偶数行。在

然而,我无法完全理解如何将这两个函数一起应用来生成列C。在

我如何实现这一点,或者如果有一个更简单的解决方案,如何实现?在


Tags: 数据函数类型定义状态差异逻辑解决方案
1条回答
网友
1楼 · 发布于 2024-06-25 22:39:58

您可以使用^{}^{}来比较浮点数,因为精度对于交换的值会创建helper DataFrame。在

注意:
对行数有效的解决方案。

print (df)
      A      B
0  16.3   1.10
1  23.2   1.33
2  10.7  -0.43
3   5.7  -2.01
4   5.4  -1.86
5  23.5   3.14
6  11.7   4.00
7  24.9  10.00

#create default Rangeindex
df = df.reset_index(drop=True) 

#MultiIndex by integer and modulo division with reshape
df1 = df.set_index([df.index // 2, df.index % 2]).unstack()
#subtract first values with second in MultiIndex
df1 = df1.xs(0, axis=1, level=1) - df1.xs(1, axis=1, level=1)
#join together with multiplied df by -1
df1 = pd.concat([df1, df1 * -1]).sort_index().reset_index(drop=True)
print (df1)
      A     B
0  -6.9 -0.23
1   6.9  0.23
2   5.0  1.58
3  -5.0 -1.58
4 -18.1 -5.00
5  18.1  5.00
6 -13.2 -6.00
7  13.2  6.00

^{pr2}$

相关问题 更多 >