【发布时间】:2016-08-09 15:09:18
【问题描述】:
我有一个需要聚合的计算,但它不适用于 PANDA 中的 GROUPBY。所以,我坚持手动迭代组。这些组由 2 个“对象”类型值字段定义,它们本质上是类别。
我认为一个优雅的解决方案可能是从具有分类值的 2 个独立列中的唯一值创建 2 个列表。 然后创建一个'for'循环,并使用字符串值或其他东西,遍历我的PANDAs条件语句以创建一个DataFrame;然后最终进行我的汇总计算。这种情况一遍又一遍地发生,只有具有聚合计算的数据帧保存在内存中,并在“df_”的末尾附加了一些计数器值,如“1”。为了不覆盖每次循环。这是我的伪代码。
cats1=['blue','yellow','pink']
cats2=['dog','horse','cow','sheep']
lengths=list(itertools.product(cats1,cats2))
for x,y,z in zip(cats1,cats2,lengths):
df = main_df[ (main_df['col2']==x) & (main_df['col3']==y) ]
df['aggcalc'] = df['col1'].agg.mean()
locals()['df_{0}'.format(z)] = df
最后一行有望根据“cats1”和“cats2”的组合数量创建持久数据帧。即,“df_1”、“df_2”等......然后,每次在“for”循环中,第 2 行中的“df”都会被覆盖。这是正确的想法吗?
编辑........ 这是一种更简单的查看方式。 我想从 2 个独立的、不同长度的列表中遍历所有可能的组合。此外,我希望在每个循环中都有一个“计数器”、“z”。这是编写此输出和后续输出的当前方式:
for x,y in list(itertools.product(cats1,cats2)):
print x,y
blue dog
blue horse
blue cow
blue sheep
yellow dog
yellow horse
yellow cow
yellow sheep
pink dog
pink horse
pink cow
pink sheep
我如何在这个输出中添加一个'z'变量,这将使输出看起来像
blue dog 0
blue horse 1
blue cow 2
blue sheep 3
yellow dog 4
...等
【问题讨论】:
-
何不试试看?
-
我相信如果你发布一个示例数据集并显示你想要的输出,我们可以建议一个更好的方法。
标签: python python-2.7 pandas