我编写了一个函数,该函数根据不同列中的值来计算每年的预计人口(为简单起见,这些列未显示)。
如何将这些行附加到数据框?
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
。那没用。我试图在函数内部声明一个新的数据框。那没用。
感谢您的帮助。
答案 0 :(得分:1)
这对我有用:
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
数据框。
希望这会有所帮助。
答案 1 :(得分:1)
有几种向Pandas DataFrame添加行的方法。当您知道如何添加行时,可以在while / for循环中以符合您要求的方式进行。您可以在此处找到将行添加到Pandas DataFrame的不同方法: