gpt4 book ai didi

python - 基于从 Pandas DataFrame 中其他 2 列的值进行条件选择的新列

转载 作者:太空狗 更新时间:2023-10-29 22:31:01 24 4
gpt4 key购买 nike

我有一个包含股票值(value)的 DataFrame

看起来像这样:

>>>Data Open High Low Close Volume Adj Close Date                                                       
2013-07-08 76.91 77.81 76.85 77.04 5106200 77.04

当我尝试使用以下 if 语句创建条件新列时:

Data['Test'] =Data['Close'] if Data['Close'] > Data['Open'] else Data['Open']

我收到以下错误:

Traceback (most recent call last):
File "<pyshell#116>", line 1, in <module>
Data[1]['Test'] =Data[1]['Close'] if Data[1]['Close'] > Data[1]['Open'] else Data[1]['Open']
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

然后我使用了 a.all() :

Data[1]['Test'] =Data[1]['Close'] if all(Data[1]['Close'] > Data[1]['Open']) else Data[1]['Open']

结果是整个 ['Open'] 列都被选中了。我没有得到我想要的条件,即每次选择 ['Open']['Close'] 列之间的最大值。

感谢任何帮助。

谢谢。

最佳答案

来自像这样的 DataFrame:

>>> df
Date Open High Low Close Volume Adj Close
0 2013-07-08 76.91 77.81 76.85 77.04 5106200 77.04
1 2013-07-00 77.04 79.81 71.81 72.87 1920834 77.04
2 2013-07-10 72.87 99.81 64.23 93.23 2934843 77.04

我能想到的最简单的事情是:

>>> df["Test"] = df[["Open", "Close"]].max(axis=1)
>>> df
Date Open High Low Close Volume Adj Close Test
0 2013-07-08 76.91 77.81 76.85 77.04 5106200 77.04 77.04
1 2013-07-00 77.04 79.81 71.81 72.87 1920834 77.04 77.04
2 2013-07-10 72.87 99.81 64.23 93.23 2934843 77.04 93.23

df.ix[:,["Open", "Close"]].max(axis=1) 可能会快一点,但我认为它看起来没那么好看在.

或者,您可以在行上使用 .apply:

>>> df["Test"] = df.apply(lambda row: max(row["Open"], row["Close"]), axis=1)
>>> df
Date Open High Low Close Volume Adj Close Test
0 2013-07-08 76.91 77.81 76.85 77.04 5106200 77.04 77.04
1 2013-07-00 77.04 79.81 71.81 72.87 1920834 77.04 77.04
2 2013-07-10 72.87 99.81 64.23 93.23 2934843 77.04 93.23

或者退回到 numpy:

>>> df["Test"] = np.maximum(df["Open"], df["Close"])
>>> df
Date Open High Low Close Volume Adj Close Test
0 2013-07-08 76.91 77.81 76.85 77.04 5106200 77.04 77.04
1 2013-07-00 77.04 79.81 71.81 72.87 1920834 77.04 77.04
2 2013-07-10 72.87 99.81 64.23 93.23 2934843 77.04 93.23

基本问题是 if/else 不能很好地处理数组,因为 if (something) 总是将 something 强制转换为单个 bool。它不等同于“对于数组中的每个元素,如果条件成立”或类似的东西。

关于python - 基于从 Pandas DataFrame 中其他 2 列的值进行条件选择的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17774271/

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