基于单独列中下方单元格(行)的结果显示列结果

2024-03-28 13:48:15 发布

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

我认为这应该是相对容易的,但我是个笨蛋!你知道吗

需要在一个新的列(称为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列)来返回基于以下内容的结果。你知道吗

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

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

A列的下一行(即A16)又是“卖出”。由于这与A17没有变化,B16细胞现在应该是“NA”

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

但是,如果单元格A15再次是“SELL”,则在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)

Tags: importdataframepandasdfasbuy细胞笨蛋
1条回答
网友
1楼 · 发布于 2024-03-28 13:48:15

numpy.select & Series.shift

我们可以使用^{}来实现这一点,这样我们就可以定义多个条件,并根据这些条件为新的列B赋值

在我们的条件中,我们使用^{},这样我们就可以检查下一个值是SELL还是BUY。你知道吗

^{}与例如使用== '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

相关问题 更多 >