【发布时间】:2015-11-22 12:57:38
【问题描述】:
我在我迭代的列表上有一个 dict 理解的工作示例:这会生成各种指示符(选择),将我的数据行分成案例(顺便说一下,这不是排他的)。
对于上下文:当我将表聚合到某些组时,这样做是为了计算特定行的案例(由列定义的标准)。这些指标现在被收集在单独的数据框中以单独导出,但如果可能的话,我也很乐意将所有指标保存在一个数据框中以进行单个聚合、连接和导出。
现在我想将它嵌套到另一个循环中。这个循环将定义我为值选择/过滤的其他变量。所以第 0 项仍然是条件本身(指标的总和是案例的计数),但第 1 项是TKOST 的选定案例(稍后查看单独标准的选择性总和),第 2 项是另一个变量 I '现在读进去了。
但是这个循环也会影响变量名是有意义的,例如有一个空白的neuro 变量用于计数(或neuro_count),neuro_cost 用于神经病例的TKOST 之和等。这怎么可能?
示例代码基本上来自 Alexander 的answer on another question。文件 I/O 和 pandas 部分用于上下文。
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()]
【问题讨论】:
-
我不是 100% 清楚你的要求是什么,但我认为你觉得接下来会很棘手,因为你正在使用列表推导来解决副作用(IMO 不是 pythonic) .
-
@AndyHayden 想下一个?
-
^ 窝! (对不起),很难筑巢。这就是我对您问题的理解?
-
谢谢,我认为在 dict 中添加另一个 for 会在语法上嵌套循环,这不是一个大问题,是不是(pythonic 与否)。无论哪种方式,我将如何使用外循环来定义变量?使用
'{}'?具体如何?为什么内部循环不会搞砸呢?
标签: python select dictionary pandas nested