1

我有包含 3 列的数据框数据 - 日期、段和指标。我正在执行以下操作:

data = pandas.read_csv("Filename.csv")
ave = data.groupby('Segment').mean() #works
ave = data.groupby('Segment').median() #gives error
ave['median'] = data.groupby('Segment').median()

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/pymodules/python2.7/pandas/core/frame.py", line 1453, in __setitem__
    self._set_item(key, value)
  File "/usr/lib/pymodules/python2.7/pandas/core/frame.py", line 1488, in _set_item
    NDFrame._set_item(self, key, value)
  File "/usr/lib/pymodules/python2.7/pandas/core/generic.py", line 301, in _set_item
    self._data.set(key, value)
  File "/usr/lib/pymodules/python2.7/pandas/core/internals.py", line 616, in set
    assert(value.shape[1:] == self.shape[1:])
AssertionError
4

2 回答 2

3

你遇到什么错误?

ave = data.groupby('Segment').median()

我认为这应该可行,也许你的数据中有一些东西导致了错误,比如 nan,我只是在猜测。您可以尝试应用自己的中值函数来查看是否可以解决错误原因,例如:

def mymed(group):
    return np.median(group.dropna())

ave = data.groupby('segment')['Metric'].apply(mymed)

如果您可以提供一些复制错误的示例数据会更容易。

这是一种不同的方法,您可以将中值添加回原始数据框,度量列的中值变为:

data['metric_median'] = data.groupby('Segment')['Metric'].transform('median')

将组的中位数附加到每个数据点是否有用取决于您之后想要做什么。

于 2012-10-25T10:33:04.497 回答
0

我认为我们可以使用以下代码计算中位数。

print(data['segment'].median())

如果它不起作用,我们可以尝试用平均值代替缺失数据,然后计算中位数。

于 2016-10-28T22:17:34.970 回答