我如何在数据集上使用pandas找到中值?

时间:2012-10-25 07:01:26

标签: python pandas

我的数据框数据有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

2 个答案:

答案 0 :(得分: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')

对于每个数据点附加的组的中位数来说,有用的取决于你之后要做的事情。

答案 1 :(得分:0)

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

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

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