Python dict理解嵌套列表以过滤多个变量的值

Python dict理解嵌套列表以过滤多个变量的值,python,select,dictionary,pandas,nested,Python,Select,Dictionary,Pandas,Nested,我在一个我反复讨论的列表上有一个dict理解的工作示例:它生成各种指标选择,顺便说一下,将我的数据行划分为非排他性的情况 For context:当我将表聚合到某些组时,这样做是为了统计由列定义的特定行的情况。指标现在收集在单独的数据帧中,以便单独导出,不过如果可能的话,我也很乐意将所有指标保存在一个数据帧中,用于单个聚合、串联和导出 现在我想把它嵌套到另一个循环中。这个循环将定义我为值选择/过滤的其他变量。因此,第0项仍然是条件本身,指标的总和是案例的计数,但第1项是TKOST的所选案例,以便

我在一个我反复讨论的列表上有一个dict理解的工作示例:它生成各种指标选择,顺便说一下,将我的数据行划分为非排他性的情况

For context:当我将表聚合到某些组时,这样做是为了统计由列定义的特定行的情况。指标现在收集在单独的数据帧中,以便单独导出,不过如果可能的话,我也很乐意将所有指标保存在一个数据帧中,用于单个聚合、串联和导出

现在我想把它嵌套到另一个循环中。这个循环将定义我为值选择/过滤的其他变量。因此,第0项仍然是条件本身,指标的总和是案例的计数,但第1项是TKOST的所选案例,以便稍后看到单独标准的选择性总和,第2项是我现在读入的另一个变量

但该循环也会影响变量名称,例如,计数或神经计数有一个空白的神经变量,神经病例TKOST总和的神经成本等。这怎么可能

示例代码基本上来自Alexander关于另一个问题的文章。文件I/O和部分是为上下文提供的

import pandas as pd

items = {'neuro': 'N', 
         'cardio': 'C', 
         'cancer': 'L', 
         'anesthetics': 'N01', 
         'analgesics': 'N02', 
         'antiepileptics': 'N03', 
         'anti-parkinson drugs': 'N04', 
         'psycholeptics': 'N05', 
         'psychoanaleptics': 'N06', 
         'addiction_and_other_neuro': 'N07', 
         'Adrugs': 'A', 
         'Mdrugs': 'M', 
         'Vdrugs': 'V', 
         'all_drugs': ''}

# Create data containers using dictionary comprehension.
dfs = {item: pd.DataFrame() for item in items.keys()}
monthly_summaries = {item: list() for item in items.keys()}

# Perform monthly groupby operations.
for year in xrange(2005, 2013):
    for month in xrange(1, 13):
        if year == 2005 and month < 7:
            continue
        filename = 'PATH/STUB_' + str(year) + '_mon'+ str(month) +'.txt'
        monthly = pd.read_table(filename,usecols=[0,3,32])
        monthly['year'] = year
        monthly['month'] = month
        dfs = {name: monthly[(monthly.ATC.str.startswith('{0}'.format(code))) 
                             & (~(monthly.TKOST.isnull()))]
                     for name, code in items.iteritems()}
        [monthly_summaries[name].append(dfs[name].groupby(['LopNr','year','month']).sum()
                                        .astype(int, copy=False)) 
         for name in items.keys()]

# Now concatenate all of the monthly summaries into separate DataFrames.
dfs = {name: pd.concat([monthly_summaries[name]], ignore_axis=True) 
       for name in items.keys()}

# Now regroup the aggregate monthly summaries.
monthly_summaries = {name: dfs[name].reset_index().groupby(['LopNr','year','month']).sum()
                    for name in items.keys()}

# Finally, save the aggregated results to files.
[monthly_summaries[name].to_csv('PATH/monthly_{0}_costs.csv'.format(name))
 for name in items()]

您应该更喜欢显式for循环:

for name in items.keys():
    monthly_summaries[name].append(dfs[name].groupby(['LopNr','year','month']).sum()
                                            .astype(int, copy=False)

# rather than
[monthly_summaries[name].append(dfs[name].groupby(['LopNr','year','month']).sum()
                                         .astype(int, copy=False)) 
    for name in items.keys()]
后者创建了一个虚无列表,可读性较差,因此效率较低

前者可以让你轻松筑巢

但该循环也会影响变量名称,例如,计数或神经计数有一个空白的神经变量,神经病例TKOST总和的神经成本等。这怎么可能

我通常添加列来进行这些计数,这样就可以矢量化/拆分/其他。
然后不要将这些列写在csv上。

我不是100%清楚你在问什么,但我想你会发现下一步很棘手,因为你使用的是纯粹的列表理解来产生副作用,这在我看来不是pythonic。@AndyHayden下一步很棘手?^nest!对不起,很棘手。这就是我对您的问题的理解?谢谢,我认为在dict中添加另一个for会在语法上嵌套循环,这不是一个大问题,是pythonic还是not。不管怎样,我将如何使用外部循环来定义变量?使用“{}”吗?到底是怎么回事?为什么内部循环不会把事情搞砸呢?我能把循环拼出来。如果我想选择另一个变量的值进行求和,而不是像现在的dfs那样只选择一个二进制,那么外部循环会是什么样子?我没有收到你关于添加列和拆分等的最后评论。@László与其尝试在一个循环中执行dfs,不如根据需要对每个值执行groupby并进行更新。我不确定我是否得到了你想要的结果,也许可以为每个值的特定partupdate提供一个示例?该示例试图说明以下内容。我有一个关于药物代码的专栏。我对药物进行了分类,尽管一种药物也可以分为多个类别。我有药品的采购记录,我想按药品类别汇总每月的数量、成本和剂量。这有用吗?