Добавить строки к пандаму в цикле данных - PullRequest
0 голосов
/ 20 января 2019

Я написал функцию, которая рассчитывает прогнозируемое население в год на основе значений в разных столбцах (эти столбцы не показаны для простоты).

Как добавить эти строки в фрейм данных?

import pandas as pd

data = {
'state': ['Ohio','New York'],
'year': [2000,2000],
'pop': [2.5,3.6]
}
census = pd.DataFrame(data)

def projected_pop_by_year(s):
    new_census = pd.DataFrame()
    current_pop = census[census['state'] == s]['pop'].values[0]
    current_year = census[census['state'] == s]['year'].values[0]
    i = 0; count = 1
    while (i + 1) <= current_pop:
        projected_pop = None # some calculations
        data = {
            'state' : [s],
            'year' :  [current_year + count],
            'pop': [projected_pop]
        }
        print((pd.DataFrame(data)))
        i += 1; count += 1


projected_pop_by_year("Ohio")

Желаемый вывод:

| State    | Year | Pop   |
|----------|------|-------|
| Ohio     | 2000 | 2.5   |
| New York | 2000 | 3.6   |
| Ohio     | 2001 | None  |
| Ohio     | 2002 | None  |

Я попытался объявить новый фрейм данных вне функции с помощью global new_census и добавить строки с помощью new_census.append(pd.DataFrame(data)). Код у меня не работал. Я пытался pd.concat. Это не сработало. Я попытался объявить новый фрейм данных внутри функции. Это не сработало.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Есть несколько способов добавления строк в Pandas DataFrame. Когда вы знаете, как добавить строку, вы можете сделать это в цикле while / for таким образом, чтобы это соответствовало вашим требованиям. Вы можете найти различные способы добавления строки в DataFrame Pandas здесь:

https://thispointer.com/python-pandas-how-to-add-rows-in-a-dataframe-using-dataframe-append-loc-iloc/

0 голосов
/ 20 января 2019

Это работает для меня:

def projected_pop_by_year(s):
    new_census = pd.DataFrame()
    current_pop = census[census['state'] == s]['pop'].values[0]
    current_year = census[census['state'] == s]['year'].values[0]
    i = 0; count = 1
    my_list = []
    while (i + 1) <= current_pop:

         projected_pop = None # some calculations
         data = {
             'state' : [s],
             'year' :  [current_year + count],
             'pop': [projected_pop]
         }
         my_list.append(pd.DataFrame(data))
         #print(pd.DataFrame(data))
         i += 1; count += 1
    my_list = pd.concat(my_list)
    print(census.append(pd.DataFrame(my_list)))
projected_pop_by_year("Ohio")

      state  year   pop
0      Ohio  2000   2.5
1  New York  2000   3.6
0      Ohio  2001  None
0      Ohio  2002  None

Объяснение Создайте список перед циклом while и сохраните вывод цикла while, добавив список. Наконец, объедините их вместе и добавьте исходный census фрейм данных.

Надеюсь, это поможет.

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