数据帧未保存正确的值

2024-04-19 06:37:22 发布

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

我正在处理一个大型数据集,在这里我需要查看同一列中的下一行值是否大于当前值。然后保存1或-1。所以,如果d列中的当前行是1,同一列中的下一个值是2,那么它将1保存在同一行和同一数据帧中的新列('e)上。问题是它总是保存一个值。你知道吗

import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.random.randn(10, 4), columns=['a', 'b', 'c', 'd'])
mask = df1.applymap(lambda x: x <-0.7)
df1 = df1[-mask.any(axis=1)]
sLength = len(df1['a'])


rwno=0
PrevClose=[]
for index,row  in df1.iterrows():
     Close=row.iloc[3]
     PrevClose.append(Close)
     rwno+=1


print df1
rwno=1  
for index,row  in df1.iterrows():
    NxtDaySpy=0
    if rwno < len(df1.index) :   
         NextClose=PrevClose[rwno]
         Close=row.iloc[3]
         df1['e']=pd.Series((NextClose-Close)/abs(NextClose-Close), index=df1.index)

    rwno+=1


print df1.head

Tags: 数据importforcloseindexlenasnp
1条回答
网友
1楼 · 发布于 2024-04-19 06:37:22

为了简单起见,假设您有一个只有一列的数据帧。你知道吗

np.random.seed(14)  # so you can reproduce
df = pd.DataFrame(np.random.randn(10, 1), columns=['a'])
df.head()

    -
 a
    -
 1.331587
 1.331587
 0.715279
-1.545400
-0.008384
 0.621336

您可以使用shift()延迟(或超前)数据。你知道吗

df['a_new'] = df.shift(periods=1).fillna(0.0)
df.head()

          -
 a           a_new
          -
 1.331587    0.000000
 0.715279    1.331587
-1.545400    0.715279
-0.008384   -1.545400
 0.621336   -0.008384

然后使用列表理解得到你的1-1

df['a_flags'] = [1 if x > y else -1 for x, y in zip(df.a, df.a_new)]
df.head()

               -
 a           a_new       a_flag
               -
 1.331587    0.000000    1
 0.715279    1.331587   -1
-1.545400    0.715279   -1 
-0.008384   -1.545400    1
 0.621336   -0.008384    1

相关问题 更多 >