Python 如何创建循环?

Python 如何创建循环?,python,for-loop,Python,For Loop,我有这个功能: def get_topName(dataset, start_year, end_year, sex): subset = dataset[(dataset.year >= start_year) & (dataset.year <= end_year) & (dataset.sex == sex)] subset1 = subset.drop(columns=['year', 'prop', 'per1000']) subse

我有这个功能:

def get_topName(dataset, start_year, end_year, sex):
    subset = dataset[(dataset.year >= start_year) & (dataset.year <= end_year) & (dataset.sex == sex)]
    subset1 = subset.drop(columns=['year', 'prop', 'per1000'])
    subset2 = subset1.groupby("name", as_index=False).n.sum()
    subset3 = subset2.sort_values("n" , ascending = False)
    return subset3[0:1]

也许我的十诫会有一个开始的一年,结束的一年,和性?这可能吗?我试图保持这个非常简单的/初学者的方法。

我将创建一个包含3列的数据框架:
decade、f\u name、m\u name
。您只需循环查看
decadeList
,获取两个sex的顶级名称,并将新记录包含到数据帧中

import pandas as pd

def get_topName(dataset, start_year, end_year, sex):
    subset = dataset[(dataset.year >= start_year) & (dataset.year <= end_year) & (dataset.sex == sex)]
    subset1 = subset.drop(columns=['year', 'prop', 'per1000'])
    subset2 = subset1.groupby("name", as_index=False).n.sum()
    subset3 = subset2.sort_values("n" , ascending = False)
    return subset3[0]

columns = ['decade', 'f_name', 'm_name']
top_names_df = pd.DataFrame(columns=columns)
for decade in decadeList:
  f_name = get_topName(baby_df, decade, decade+10, female_sex)
  m_name = get_topName(baby_df, decade, decade+10, male_sex)
  top_names_df.loc[len(top_names_df)] = [deacade, f_name, m_name]
将熊猫作为pd导入
def get_topName(数据集、开始年份、结束年份、性别):

subset=dataset[(dataset.year>=start\u year)和(dataset.year)在您的循环中,您需要
x
中的
x
用于十年列表中的x
来携带所有要放入函数的信息。如果
x
包含所有
dataset、start\u year、end\u year、sex
,则可以使用
name=get\u topName(*x)将其解包
否则您需要以某种方式传递所有参数。另外,在函数返回中,您可以简化一点:
subset3[0:1]
与只说
subset3[0]
相同,但我收到了一条错误消息。“'return'在函数外部”返回是针对函数的,您的循环不是函数。您需要声明一个空列表(或其他数据结构)并在循环中向其添加
如何查看此top_names_df?只需使用
打印(top_names_df)
好的,这似乎有效,但当我有50年的时间来检查时,它只打印一个名称和值。我如何让它显示所有的名称?你的
十年名单是否实际包含了50年…?是的,它的列表类似于“十年名单=[[baby_df,1950,1960,“M”],…”,然后我在f_名称和M_名称中使用了*x
import pandas as pd

def get_topName(dataset, start_year, end_year, sex):
    subset = dataset[(dataset.year >= start_year) & (dataset.year <= end_year) & (dataset.sex == sex)]
    subset1 = subset.drop(columns=['year', 'prop', 'per1000'])
    subset2 = subset1.groupby("name", as_index=False).n.sum()
    subset3 = subset2.sort_values("n" , ascending = False)
    return subset3[0]

columns = ['decade', 'f_name', 'm_name']
top_names_df = pd.DataFrame(columns=columns)
for decade in decadeList:
  f_name = get_topName(baby_df, decade, decade+10, female_sex)
  m_name = get_topName(baby_df, decade, decade+10, male_sex)
  top_names_df.loc[len(top_names_df)] = [deacade, f_name, m_name]