繁体   English   中英

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

[英]pandas column result based on result of below cell (row) in separate column

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

需要在新的 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 列)来根据以下内容返回结果。

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

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

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

A 列的下一行(即 A15)是“HODL”。 所有“HODL”单元格应始终反映为 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM