Цикл над пандами DataFrame - PullRequest
       7

Цикл над пандами DataFrame

0 голосов
/ 25 ноября 2018

У меня странная проблема, что результат не меняется для каждой итерации.Код следующий:

import pandas as pd
import numpy as np

X = np.arange(10,100)
Y = X[::-1]
Z = np.array([X,Y]).T

df = pd.DataFrame(Z ,columns = ['col1','col2'])
dif = df['col1'] - df['col2']

for gap in range(100):
    Up = dif > gap
    Down = dif < -gap

    df.loc[Up,'predict'] = 'Up'
    df.loc[Down,'predict'] = 'Down'

    df_result = df.dropna()
    Total = df.shape[0]
    count = df_result.shape[0]
    ratio = count/Total
    print(f'Total: {Total}; count: {count}; ratio: {ratio}')

Результат всегда

Total: 90; count: 90; ratio: 1.0

, когда этого не должно быть.Заранее спасибо

1 Ответ

0 голосов
/ 25 ноября 2018

Нашел корень проблемы через 5 минут после публикации этого вопроса.Мне просто нужно было сбросить dataFrame к исходному, чтобы решить проблему.

import pandas as pd
import numpy as np

X = np.arange(10,100)
Y = X[::-1]
Z = np.array([X,Y]).T

df = pd.DataFrame(Z ,columns = ['col1','col2'])
df2 = df.copy()#added this line to preserve the original df
dif = df['col1'] - df['col2']

for gap in range(100):
    df = df2.copy()#reset the altered df back to the original
    Up = dif > gap
    Down = dif < -gap

    df.loc[Up,'predict'] = 'Up'
    df.loc[Down,'predict'] = 'Down'

    df_result = df.dropna()
    Total = df.shape[0]
    count = df_result.shape[0]
    ratio = count/Total
    print(f'Total: {Total}; count: {count}; ratio: {ratio}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...