【问题标题】:Itering through a list if identical elements遍历相同元素的列表
【发布时间】:2017-05-01 08:04:43
【问题描述】:

我有以下函数,它返回pandas系列的States - Associated Counties

def answer():
    census_df.set_index(['STNAME', 'CTYNAME'])
    for name, state, cname in zip(census_df['STNAME'], census_df['STATE'], census_df['CTYNAME']):
        print(name, state, cname)

Alabama 1 Tallapoosa County
Alabama 1 Tuscaloosa County
Alabama 1 Walker County
Alabama 1 Washington County
Alabama 1 Wilcox County
Alabama 1 Winston County
Alaska 2 Alaska
Alaska 2 Aleutians East Borough
Alaska 2 Aleutians West Census Area
Alaska 2 Anchorage Municipality
Alaska 2 Bethel Census Area
Alaska 2 Bristol Bay Borough
Alaska 2 Denali Borough
Alaska 2 Dillingham Census Area
Alaska 2 Fairbanks North Star Borough

我想知道其中县最多的州。我可以像这样遍历每个状态:

counter = 0
counter2 = 0
for name, state, cname in zip(census_df['STNAME'], census_df['STATE'], census_df['CTYNAME']):
     if state == 1:
         counter += 1
 print(counter)
     if state == 1:
         counter2 += 1
 print(counter2)

等等。我可以设定状态数量 (rng = range(1, 56)) 并遍历它,但创建 56 个列表是一场噩梦。如果这样做有没有更简单的方法?

【问题讨论】:

    标签: python list pandas iteration


    【解决方案1】:

    Pandas 允许我们在没有循环/迭代的情况下执行此类操作:

    In [21]: df.STNAME.value_counts()
    Out[21]:
    Alaska     9
    Alabama    6
    Name: STNAME, dtype: int64
    
    In [24]: df.STNAME.value_counts().head(1)
    Out[24]:
    Alaska    9
    Name: STNAME, dtype: int64
    

    In [18]: df.groupby('STNAME')['CTYNAME'].count()
    Out[18]:
    STNAME
    Alabama    6
    Alaska     9
    Name: CTYNAME, dtype: int64
    
    In [19]: df.groupby('STNAME')['CTYNAME'].count().idxmax()
    Out[19]: 'Alaska'
    

    【讨论】:

    • 我看到你也完成了这项任务 :) 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多