首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在计算后添加新列

如何在计算后添加新列
EN

Stack Overflow用户
提问于 2018-07-30 05:32:11
回答 1查看 85关注 0票数 0

我有这个DataFrame:

代码语言:javascript
运行
复制
               Open     High      Low    Close AdjClose    Volume
datetime                                                         
2018-07-27  28.8200  29.3350  27.7050  28.1300  28.1300   8101362
2018-07-26  28.4800  29.1200  27.5500  28.9800  28.9800  10582061
2018-07-25  30.0900  30.0900  28.4800  28.9800  28.9800   9801897
2018-07-24  30.4500  30.9400  29.9650  30.1400  30.1400   5706941
2018-07-23  31.1100  31.3500  30.6000  30.8200  30.8200   6023310                  

我想在下面的for循环中计算两个新列(我使用的是python 2.7.15,而且我不是程序员)。这是我的循环:

代码语言:javascript
运行
复制
A=pd.DataFrame(df)
print (A.head(5))
Len=len(A)
print (Len)
for Rw in range(Len-1):
    def adj(A):
        BB=float(A.iloc[Rw,4])
        CC=float(A.iloc[Rw+1,4])
        #print (BB,CC)

        if BB>CC:
            x1=BB-CC
            x2=0   
            print(x1,x2)
        else:
            x1=0
            x2=CC-BB
            print(x1,x2)

        A.at[Rw+1,'Up']=x1   #Store calculation results in Up column
        A.at[Rw+1,'Down']=x2 #Store calculation results in Down column  

    adj(A)

print(A.head(5))

当我启用==> A.atRw+1,'up'=x1时,我得到错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "D:\Yossi\eclipse-workspace_yossi\Tests\to_forum___003.py", line 85, in <module>
    adj(A)
  File "D:\Yossi\eclipse-workspace_yossi\Tests\to_forum___003.py", line 82, in adj
    A.at[Rw+1,'Up']=x1      #Store calculation results in UpMv columns
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 2159, in __setitem__
    self.obj._set_value(*key, takeable=self._takeable)
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2587, in _set_value
    self.loc[index, col] = value
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 189, in __setitem__
    self._setitem_with_indexer(indexer, value)
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 375, in _setitem_with_indexer
    labels = index.insert(len(index), key)
  File "C:\Python27\lib\site-packages\pandas\core\indexes\datetimes.py", line 2194, in insert
    "cannot insert DatetimeIndex with incompatible label")
TypeError: cannot insert DatetimeIndex with incompatible label

如何使用DataFrame查看'Up‘列的x1计算结果和'Down’列的x2计算结果,如下图所示?

谢谢你们所有人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 05:43:31

从在循环中定义函数开始,原始代码中有很多地方是错误的。这是一个紧凑、高效、基于pandas/numpy的解决方案:

代码语言:javascript
运行
复制
import numpy as np
difference = df['Close'] - df['Close'].shift()
df['Up'] = -np.minimum(difference, 0)
df['Down'] = np.maximum(difference, 0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51584734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档