gpt4 book ai didi

python - 创建新列来比较 pandas 数据框中的行

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:48 26 4
gpt4 key购买 nike

我希望根据接下来两行中看到的值在数据框中创建一个新列。具体来说,如果接下来两行中的任何值都低于 4,那么我希望当前行中的新值为 0(如果接下来两行中的所有值都高于 4,那么我希望当前行中的新值为 1).

>>> df = pandas.DataFrame({"A": [5,6,7,3,2]})
>>> df
A
0 5
1 6
2 7
3 8
4 2
>>> desired_result = pandas.DataFrame({"A": [5,6,7,8,2], "new": [1,1,0,0,0]})
>>> desired_result
A new
0 5 1
1 6 1
2 7 0
3 8 0
4 2 0

在“desired_result”中,您可以看到第一个值为 1,因为 6 和 7 都大于 4(并且应用相同的逻辑),直到第三行新值变为 0,因为当我们向前看接下来的两行 (8,2) 然后我们看到 2 < 4 所以值变为 0。

我一直在尝试使用 apply 函数,但我不知道如何将接下来的 2 行值作为输入传递。

我在这个网站上找到了很多关于跨列比较的帮助,但无法弄清楚如何像我描述的那样“向前看”。

感谢您的帮助!

最佳答案

您可以将 new 值设置为 1,然后将 locshiftlt 一起使用(less than) 将适当的值设置为零。

df = pd.DataFrame({"A": [5, 6, 7, 8, 2]})
df['new'] = 1

df.loc[(df.A.shift(-1).lt(4)) | (df.A.shift(-2).lt(4)), 'new'] = 0

# The last value does not have any future observations and should be set to zero.
df.new.iat[-1] = 0

>>> df
A new
0 5 1
1 6 1
2 7 0
3 8 0
4 2 0

扩展到接下来的 8 行而不是 2 行:

nrows = 8
df.loc[eval(" | ".join("df.A.shift(-{0}).lt(4)".format(n)
for n in range(1, nrows + 1))), 'new'] = 0

关于python - 创建新列来比较 pandas 数据框中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35353195/

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