[英]Looping Columns in Dataframes Python3
I am wondering if you would be able to do a loop based on the following scenario (because I was trying to do it, but couldn't seem to figure it out).我想知道您是否能够根据以下情况进行循环(因为我试图这样做,但似乎无法弄清楚)。
My dataframe has the following headers:我的 dataframe 有以下标题:
female2['fiscal_year','ratio_loanofficers', 'ratio_female_borrowers', 'ratio_male_borrowers']
What I'm trying to do is to get the mean of each ratio for each year under fiscal_year
.我正在尝试做的是在财政年度下获得每个比率的
fiscal_year
。 So, I might have to do three loops, each for loan officers, female borrowers and male borrowers.所以,我可能需要为信贷员、女性借款人和男性借款人做三个循环。 Under
fiscal_year
, there are multiple 2010, 2011,...2019 entries.在
fiscal_year
下,有多个 2010、2011、...2019 条目。 So what I actually did to achieve my answer is create a database subset and group by per year and then get the mean.所以我实际上为实现我的答案所做的是创建一个数据库子集并每年分组,然后得到平均值。 It worked...but I wanted to see if a loop would work (I'm very new to Python).
它有效......但我想看看循环是否有效(我对 Python 很陌生)。
This was my initial code:这是我的初始代码:
for y in range(2010, 2020):
if y == 2010:
loan2010 += round(female2.ratio_floanofficers.mean(), 3)
elif y == 2011:
loan2011 += round(female2.ratio_floanofficers.mean(), 3)
elif y == 2012:
loan2012 += round(female2.ratio_floanofficers.mean(), 3)
elif y == 2013:
loan2013 += round(female2.ratio_floanofficers.mean(), 3)
elif y == 2014:
loan2014 += round(female2.ratio_floanofficers.mean(), 3)
elif y == 2015:
loan2015 += round(female2.ratio_floanofficers.mean(), 3)
elif y == 2016:
loan2016 += round(female2.ratio_floanofficers.mean(), 3)
elif y == 2017:
loan2017 += round(female2.ratio_floanofficers.mean(), 3)
elif y == 2018:
loan2018 += round(female2.ratio_floanofficers.mean(), 3)
else:
loan2019 += round(female2.ratio_floanofficers.mean(), 3)
print(loan2010, loan2011, loan2012, loan2013, loan2014, loan2015, loan2016, loan2017, loan2018, loan2019)
What I got, however, was the same result for each year, which indicated to me that the loop wasn't working as I wanted it to.然而,我得到的是每年相同的结果,这向我表明循环没有按我想要的那样工作。
Thanks!谢谢!
round(female2.ratio_floanofficers.mean()
is the same for every loop, so you will get the same value for each year. y
hasn't been used to select the data corresponding to a particular year. round(female2.ratio_floanofficers.mean()
对于每个循环都是相同的,因此每年都会得到相同的值y
尚未用于 select 对应于特定年份的数据。
for-loop
is required, replace round(female2.ratio_floanofficers.mean()
with the followingfor-loop
,请将round(female2.ratio_floanofficers.mean()
替换为以下内容round(female2[female2.fiscal_year == y]['ratio_loanofficers'].mean(), 3)
dict
dict
f'loan{year}'
is an f-String: A New and Improved Way to Format Strings in Python f'loan{year}'
是一个f 字符串:在 Python 中格式化字符串的一种新的改进方法
{year: 'some value' for year in range(2010, 2020)}
is a dictionary comprehension {year: 'some value' for year in range(2010, 2020)}
是字典理解female2[female2.fiscal_year == year]
is Boolean indexing female2[female2.fiscal_year == year]
是Boolean 索引import pandas as pd
# dataframe
female2 = pd.DataFrame({'fiscal_year': [2018, 2018, 2018, 2018, 2019, 2019, 2019, 2019],
'ratio_female_borrowers': [1, 2, 3, 4, 5, 6, 7, 8]})
fiscal_year ratio_female_borrowers
0 2018 1
1 2018 2
2 2018 3
3 2018 4
4 2019 5
5 2019 6
6 2019 7
7 2019 8
# calculate mean for loan year into dict
loans = {f'loan{year}': round(female2[female2.fiscal_year == year]['ratio_female_borrowers'].mean(), 3) for year in range(2010, 2020)}
print(loans)
{'loan2010': nan,
'loan2011': nan,
'loan2012': nan,
'loan2013': nan,
'loan2014': nan,
'loan2015': nan,
'loan2016': nan,
'loan2017': nan,
'loan2018': 2.5,
'loan2019': 6.5}
print(loans['loan2019'])
>>> 6.5
for-loop
for the dict comprehension
dict comprehension
的等效for-loop
loans = dict()
for year in range(2010, 2020):
loans[f'loan{year}'] = round(female2[female2.fiscal_year == year]['ratio_female_borrowers'].mean(), 3)
pandas.DataFrame.groupby
pandas.DataFrame.groupby
ratio_female_borrowers_mean = female2.groupby(['fiscal_year'], as_index=False)['ratio_female_borrowers'].agg(['mean'])
print(ratio_female_borrowers_mean)
mean
fiscal_year
2018 2.5
2019 6.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.