【问题标题】:A series query on groupby functiongroupby 函数系列查询
【发布时间】:2015-01-23 11:25:19
【问题描述】:

我有一个名为 active 的数据框,它有 10 个唯一的 POS 列值。 然后我对 POS 值进行分组并平均归一化 OPW 列,然后将归一化的值存储为单独的列 ['resid']。 如果我对 POS 值进行分组,那么新活动数据框的 POS 列不应该只包含唯一的 POS 值吗??

例如:

df2 = pd.DataFrame({'X' : ['B', 'B', 'A', 'A'], 'Y' : [1, 2, 3, 4]})
print df2

df2.groupby(['X']).sum()

我得到这样的输出:

    Y
X   
A   7
B   3

在我的示例中,我不应该得到一个只有唯一 Pos 值的列,如下所述??

POS     其他栏目
Rf      值
2B       价值观
LF      值
2B      值
OF      值

【问题讨论】:

  • 请发布一些测试数据而不是图片。

标签: python pandas group-by


【解决方案1】:

如果没有实际数据,我无法 100% 确定,但我很确定这里的问题是您没有汇总数据。

让我们一步一步来分组。

当您执行active.groupby('POS') 时,实际发生的情况是您正在对每个唯一 POS 的数据帧进行切片,并将这些切片中的每一个按顺序传递给应用的函数。

您可以通过使用 get_group 更好地了解正在发生的事情(例如:active.groupby('POS').get_group('RF'))

因此,您将 meanNormalizeOPW 函数应用于每个切片。该函数为传递的数据帧的每一行创建列“resid”的平均归一化值。然后您返回该数据框,并以与传递的形状相似的形状结尾。

因此,如果您只是向返回的 df 添加一个聚合函数,它应该可以正常工作。我猜这里你想要一个平均值,所以只需将 return df 更改为 return df.mean()

【讨论】:

  • 很好的解释,但您说您传递的是唯一的 POS 值,对吗?但在这种情况下,我只有 10 个唯一 POS 值,那么我应该得到一些在我的示例中讨论的东西。
  • 不,它没有传递唯一的 pos 值。它传递包含所有包含一个 POS 的行的数据帧切片。尝试运行 get_group 以更好地了解它的工作原理。
  • active.groupby('POS').get_group('RF') 我收到一个关键错误。我无法在我的数据框中使用它。但对于 2B,它正在工作。好的,谢谢,我了解了这个概念背后的基本思想。此外,我认为我们不必在 meanNormalizeOPW 函数中返回 df.mean()。
猜你喜欢
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
相关资源
最近更新 更多