【发布时间】:2020-08-31 09:56:17
【问题描述】:
考虑按列分组的数据框。
example = pandas.DataFrame({
'A': numpy.arange(100) // 10,
'B': numpy.nan
})
现在我希望通过对每个组进行一些计算来更新列。结果是一个系列,而不是像平均值或中位数这样的单个聚合数字。一种解决方案是:
for a, rows in example.groupby('A'):
# Some update that is performed per group
some_update = numpy.arange(len(rows))
# slow:
example.loc[rows.index, 'B'] = some_update
但是,我注意到 example.loc[...] = ... 语句占用了大部分时间,这很遗憾,尤其是当组是原始 DataFrame 中的连续分区时。
是否可以 groupby 并让行成为原始数据的子集视图,以便将更新传递给原始 DataFrame?
【问题讨论】:
-
这对你有用吗:
pd.concat( [value.assign(B=np.arange(len(value))) for key, value in example.groupby("A")])? -
example.groupby("A")["B"].cumcount()? -
@HenryYik 谢谢!所以
numpy.arange(...)只是一个例子,以避免我的问题变得复杂。它可以是更新组的任何内容。在我的例子中,它是来自不同实验的时间序列,其中使用启发式枚举由零信号分隔的天数。 -
@sammywemmy
pandas.concat会不会很慢? -
@Herbert
slowness将来自 for 循环,不一定来自串联。
标签: python pandas group-by pandas-groupby