代码之家  ›  专栏  ›  技术社区  ›  cooldood3490

在while循环中将行附加到pandas数据帧

  •  1
  • cooldood3490  · 技术社区  · 6 年前

    我编写了一个函数,它根据不同列中的值计算每年的预计人口数(为了简单起见,不显示这些列)。

    如何将这些行附加到数据帧?

    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 回复  |  直到 6 年前
        1
  •  1
  •   anky    6 年前

    这对我很有用:

    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 数据文件。

    希望这有帮助。

        2
  •  1
  •   hk331    6 年前

    向熊猫数据帧添加行有几种方法。当您知道如何添加行时,可以在while/for循环中以符合您要求的方式进行添加。您可以在此处找到将行添加到熊猫数据框的不同方法:

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