Python dict理解嵌套列表以过滤多个变量的值
我在一个我反复讨论的列表上有一个dict理解的工作示例:它生成各种指标选择,顺便说一下,将我的数据行划分为非排他性的情况 For context:当我将表聚合到某些组时,这样做是为了统计由列定义的特定行的情况。指标现在收集在单独的数据帧中,以便单独导出,不过如果可能的话,我也很乐意将所有指标保存在一个数据帧中,用于单个聚合、串联和导出 现在我想把它嵌套到另一个循环中。这个循环将定义我为值选择/过滤的其他变量。因此,第0项仍然是条件本身,指标的总和是案例的计数,但第1项是TKOST的所选案例,以便稍后看到单独标准的选择性总和,第2项是我现在读入的另一个变量 但该循环也会影响变量名称,例如,计数或神经计数有一个空白的神经变量,神经病例TKOST总和的神经成本等。这怎么可能 示例代码基本上来自Alexander关于另一个问题的文章。文件I/O和部分是为上下文提供的Python dict理解嵌套列表以过滤多个变量的值,python,select,dictionary,pandas,nested,Python,Select,Dictionary,Pandas,Nested,我在一个我反复讨论的列表上有一个dict理解的工作示例:它生成各种指标选择,顺便说一下,将我的数据行划分为非排他性的情况 For context:当我将表聚合到某些组时,这样做是为了统计由列定义的特定行的情况。指标现在收集在单独的数据帧中,以便单独导出,不过如果可能的话,我也很乐意将所有指标保存在一个数据帧中,用于单个聚合、串联和导出 现在我想把它嵌套到另一个循环中。这个循环将定义我为值选择/过滤的其他变量。因此,第0项仍然是条件本身,指标的总和是案例的计数,但第1项是TKOST的所选案例,以便
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提供一个示例?该示例试图说明以下内容。我有一个关于药物代码的专栏。我对药物进行了分类,尽管一种药物也可以分为多个类别。我有药品的采购记录,我想按药品类别汇总每月的数量、成本和剂量。这有用吗?