简体   繁体   English

数据框Python3中的循环列

[英]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!谢谢!

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

Equivalent 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)

Use 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM