gpt4 book ai didi

python - Pandas 列结果基于单独列中下方单元格(行)的结果

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:01 25 4
gpt4 key购买 nike

我认为这应该相对容易,但我是菜鸟!

需要在新的 pandas 列(称为 B 列)中返回结果,该列基于 A 列中下一行的结果。

请打印以下代码

import pandas as pd
df = pd.DataFrame({'A': ['BUY', 'BUY', 'HODL', 'SELL', 'HODL', 'HODL', 'BUY', 'SELL', 'SELL', 'BUY', 'BUY', 'HODL', 'SELL', 'SELL', 'SELL', 'HODL', 'SELL', 'SELL','BUY']})
print(df)

我需要一个新列(B 列)来返回基于以下结果的结果。

从 pandas 数据框的底部开始。 A 列中的最后一个单元格(即 A18 = 'BUY')始终可以返回与 B 列中最后一个单元格相同的结果。

A 列中的下一行(即 A17)是“卖出”。我认为这是一个变化,因此单元格 B17 现在也应该是“卖出”

A 列中的下一行(即 A16)再次是“卖出”。由于这与 A17 没有变化,因此单元格 B16 现在应该是“NA”

A 列(即 A15)中的下一行是“HODL”。所有“HODL”单元格应始终反射(reflect)为 B 列中的“HODL”单元格

但是,如果单元格 A15 再次为“卖出”,则将在 B 列中应用另一个“NA”。

“卖出”单元格的相同原则适用于“买入”单元格

提供以下 df 只是为了提供预期结果的可视化:

import pandas as pd

df = pd.DataFrame({'A': ['BUY', 'BUY', 'HODL', 'SELL', 'HODL', 'HODL', 'BUY', 'SELL', 'SELL', 'BUY', 'BUY', 'HODL', 'SELL', 'SELL', 'SELL', 'HODL', 'SELL', 'SELL','BUY'], 'B': ['NA', 'BUY', 'HODL', 'SELL', 'HODL', 'HODL', 'BUY', 'NA', 'SELL', 'NA', 'BUY', 'HODL', 'NA', 'NA', 'SELL', 'HODL', 'NA', 'SELL','BUY']})

print(df)

最佳答案

numpy.select & Series.shift

我们可以使用numpy.select为此,我们可以定义多个条件,并根据这些条件为您的新列 B 分配值。

在我们的条件下,我们使用 Series.shift我们使用它来检查下一个值是 SELL 还是 BUY

Series.eq与使用 == 'SELL' 相同,例如

注意 我反转了你的数据框,因为你想自下而上地应用逻辑,我用 df[::-1] 来做到这一点。这与在 Python 中反转列表的方法相同。

# Reverse dataframe
df = df[::-1]

conditions = [
df['A'].eq('HODL'),
df['A'].eq('SELL') & df['A'].shift().eq('SELL'),
df['A'].eq('BUY') & df['A'].shift().eq('BUY')
]

choices = ['HODL', 'NA', 'NA']

df['B'] = np.select(conditions, choices, default=df['A'])

# Reverse dataframe back to original state
df = df[::-1]

输出

print(df)
A B
0 BUY NA
1 BUY BUY
2 HODL HODL
3 SELL SELL
4 HODL HODL
5 HODL HODL
6 BUY BUY
7 SELL NA
8 SELL SELL
9 BUY NA
10 BUY BUY
11 HODL HODL
12 SELL NA
13 SELL NA
14 SELL SELL
15 HODL HODL
16 SELL NA
17 SELL SELL
18 BUY BUY

关于python - Pandas 列结果基于单独列中下方单元格(行)的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991936/

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