使用条件在dataframe中创建计算列

2024-06-16 10:52:06 发布

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

Python中的Dataframe包含以下数字数据
mydf=

mydate     mytime                  myopen                 High                   Low                    myclose
---------- ----------------------- ---------------------- ---------------------- ---------------------- -----------
2019-04-15 1900-01-01 15:25:00.000 1675.75                1679.75                1673.35                1673.35
2019-04-15 1900-01-01 15:25:00.000 142.75                 142.8                  142.25                 142.45
2019-04-15 1900-01-01 15:25:00.000 387                    387.5                  385.7                  387.05
2019-04-15 1900-01-01 15:25:00.000 54.7                   54.7                   54.45                  54.45
2019-04-15 1900-01-01 15:25:00.000 1026.1                 1028                   1026.1                 1027.15
2019-04-15 1900-01-01 15:25:00.000 53.65                  53.75                  53.5                   53.7

我需要创建一个名为newcol的计算列,它的计算将基于一个条件。条件是哪些列的值更高—myopen/myclose。对于更高的价值观,我相信np.fmax公司函数对我的情况很好。
因此,对于上述数据框中的每个记录。。。你知道吗

If myopen >= myclose:
mydf['newcol']= myopen X 6 + 4 * High + (High - myclose)
else:
mydf['newcol']= myclose X 3 + 4 * myclose + (myclose - myopen)

我相信通过穿越mydf可以达到上述目的, 不过,我也觉得应该有一个更有效的方法来实现这一点。你知道吗

我将感谢上述帮助,因为我仍然是一个新手。你知道吗

Thx在adv。你知道吗


Tags: 数据dataframenp数字条件lowhigh价值观
2条回答

除了numpy.where之外,您还可以使用loc函数和条件来实现这一点,如下所示:

df.loc[df.myopen >= df.myclose, 'new_col'] = df.myopen X 6 + 4 * df.High + (df.High - df.myclose)
df.loc[df.myopen < df.myclose, 'new_col'] = df.myclose X 3 + 4 * df.myclose + (df.myclose - df.myopen) 

或者,如果函数变得更复杂,可以使用dataframe.apply。e、 g

def open_close_calculation(df):
    if df.myopen >= df.myclose:
        return df.myopen X 6 + 4 * df.High + (df.High - df.myclose)
    else:
        return df.myclose X 3 + 4 * df.myclose + (df.myclose - df.myopen) 

df['new_col'] = df.apply(open_close_calculation, axis=1)

您可以使用np.where

more_than = ...  # value of new column when more
less_than = ...  # value of new column when less

mydf['newcol'] = np.where(mydf['myopen'] > mydf['myclose'], more_than, less_than)

相关问题 更多 >