Проблема добавления pandas добавления внутри цикла for - PullRequest
0 голосов
/ 17 апреля 2020

Попытка l oop чего-либо и добавление результатов к Pandas df, который я создал. Цель состоит в том, чтобы df содержал все результаты из l oop.

У меня проблемы с получением pd.append для работы. Прямо сейчас это, кажется, не добавляет, но перезаписывает существующую строку, и я просто остаюсь с последней строкой l oop. Я знаю, что все данные верны, так как я могу распечатать их в l oop, и я вижу правильные значения. Надеюсь, что-то упущено.

for year in dfClose['year'].unique():
        tempYearDF = dfClose[dfClose['year'] == year]
        for i in dfClose['month'].unique():
            tempOpenDF = tempYearDF.loc[tempYearDF["month"] == i, "open"]
            tempCloseDF = tempYearDF.loc[tempYearDF["month"] == i, "close"]
            # If statement below is stopping loops on months that hasnt happened yet for the latest year.
            if len(tempOpenDF) > 0:
                othernumpyopen = tempOpenDF.to_numpy()
                othernumpyclose = tempCloseDF.to_numpy()
                aroundOpen = np.around(othernumpyopen[0],3)
                aroundClose = np.around(othernumpyclose[-1],3)
                month_pd = pd.DataFrame (columns=["YEAR", "MONTH", "MONTH OPEN", "MONTH CLOSE"])
                month_pd = month_pd.append({'YEAR' : year , 'MONTH' : i , 'MONTH OPEN' : aroundOpen , "MONTH CLOSE" : aroundClose} , ignore_index=True)

То, что у меня осталось после выполнения. Я пытаюсь добавить все строки в df.

    YEAR    MONTH   MONTH OPEN  MONTH CLOSE
0   2020.0  4.0 246.5   286.69

Пример вывода, когда я добавляю печать в l oop.

     YEAR  MONTH  MONTH OPEN  MONTH CLOSE
0  2020.0    1.0      296.24       309.51
     YEAR  MONTH  MONTH OPEN  MONTH CLOSE
0  2020.0    2.0       304.3       273.36
     YEAR  MONTH  MONTH OPEN  MONTH CLOSE
0  2020.0    3.0      282.28       254.29
     YEAR  MONTH  MONTH OPEN  MONTH CLOSE
0  2020.0    4.0       246.5       286.69

Пример dfЗакройте, если вам это нужно

    open    year    month   day date
0   30.490000   2010    1   4   2010-01-04
1   30.657143   2010    1   5   2010-01-05
2   30.625713   2010    1   6   2010-01-06
3   30.250000   2010    1   7   2010-01-07
4   30.042856   2010    1   8   2010-01-08


open     float64
close    float64
year       int64
month      int64
day        int64
date      object
dtype: object

1 Ответ

1 голос
/ 18 апреля 2020

Вы переопределяете month_pd каждый раз в l oop, перезаписывая предыдущие версии. Иметь список структур данных, которые вы объединяете в конце.

dfs = []
for year in dfClose['year'].unique():
        tempYearDF = dfClose[dfClose['year'] == year]
        for i in dfClose['month'].unique():
            tempOpenDF = tempYearDF.loc[tempYearDF["month"] == i, "open"]
            tempCloseDF = tempYearDF.loc[tempYearDF["month"] == i, "close"]
            # If statement below is stopping loops on months that hasnt happened yet for the latest year.
            if len(tempOpenDF) > 0:
                othernumpyopen = tempOpenDF.to_numpy()
                othernumpyclose = tempCloseDF.to_numpy()
                aroundOpen = np.around(othernumpyopen[0],3)
                aroundClose = np.around(othernumpyclose[-1],3)
                dfs.append(pd.DataFrame({'YEAR' : year , 'MONTH' : i , 'MONTH OPEN' : aroundOpen , "MONTH CLOSE" : aroundClose}))

pd.concat(dfs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...