python - 对数组中的项进行求和 - 在 DataFrame 中 - 在 groupby 中

标签 python pandas

我正在编写一些代码,显示主题模型随时间的分布。现在,数据框看起来像这样:

doc_id  date        topic_dist
1       2007-01-01  [.2,.5,.3]
2       2007-03-02  [.8,.1,.1]
...

我的目标是按日期(按月、年或季度)对文档进行分组,并对数组中的每个项目求和(所有数组的长度相同),以创建如下所示的输出:

month    topic_sum
2007-01  [54.8, 98.3, 61.0]

到目前为止,我已经尝试过了

year_groups = df.groupby(df['date'].map(lambda x: x.year))
output = pd.DataFrame()
output['yearly_topic_dist'] = year_groups.apply(lambda x: sum(x['topic_dist']))

所以,我不知道如何分别对数组中的每个项目求和,并输出另一个数组。

最佳答案

我可能做错了什么,但是当您按一个月分组时,@piRSquared 的解决方案似乎与下面的示例 DataFrame 不同。但它并没有与 12 个月组的情况相矛盾。我想这与跨越一年以上的日期有关。

另一种选择是将 topic_dist 列转换为 Numpy 数组,并将 np.sum() 应用于您的时间组:

from datetime import datetime

import numpy as np
import pandas as pd

df = pd.DataFrame([[1, '2007-01-01', [.2, .5, .3]],
                   [2, '2007-01-02', [.8, .5, .3]],
                   [3, '2008-01-14', [0.1, 0.2, 0.3]]],
                 columns=['doc_id', 'date', 'topic_dist'])


df.date = pd.to_datetime(df.date)

df = df.set_index('date')

df.topic_dist = df.topic_dist.apply(lambda x: np.array(x))

您可以按一个月进行分组。

# Group by single months
df.groupby(pd.TimeGrouper('M'))['topic_dist'].apply(lambda x: np.sum(x))

date
2007-01-31    [1.0, 1.0, 0.6]
2007-02-28                  0
2007-03-31                  0
2007-04-30                  0
2007-05-31                  0
2007-06-30                  0
2007-07-31                  0
2007-08-31                  0
2007-09-30                  0
2007-10-31                  0
2007-11-30                  0
2007-12-31                  0
2008-01-31    [0.1, 0.2, 0.3]
Name: topic_dist, dtype: object

或按 12 个月分组:

df.groupby(pd.TimeGrouper('12M'))['topic_dist'].apply(lambda x: np.sum(x))
date
2007-01-31    [1.0, 1.0, 0.6]
2008-01-31    [0.1, 0.2, 0.3]
Name: topic_dist, dtype: object

或其他间隔:

df.groupby(pd.TimeGrouper('5M'))['topic_dist'].apply(lambda x: np.sum(x))
date
2007-01-31    [1.0, 1.0, 0.6]
2007-06-30                  0
2007-11-30                  0
2008-04-30    [0.1, 0.2, 0.3]
Name: topic_dist, dtype: object

关于python - 对数组中的项进行求和 - 在 DataFrame 中 - 在 groupby 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37446465/

相关文章:

python - 如何设置 Pandas DataFrame 左上角单元格的样式

python - 关于如何创建 Pandas DataFrame 的困惑

Python 2.7.6 Pydoop 在 Ubuntu 上安装失败

python - 返回 inf : how can I solve this? 的 pandas DataFrame 列的 mean()

python - 我如何使用带有 python 的 cron 来使用谷歌驱动器?

通过 Decompress() 对象膨胀数据时,python zlib 会产生 -3 错误

pandas - 使用 Graphviz 绘制决策树时出现“特征名称长度与特征数量不匹配”错误

python - 控制所有子图上的 xaxis 刻度线大小

python - 使用多索引标准化 pandas DataFrame

python - Django ImportError : Could not import settings 'mysite.settings.local' (Is it on sys.路径?): No module named settings.本地