Pandas:合并重复的索引值

Pandas: combining duplicate index values

我有一个 pandas 系列,我想用三种不同的方式组合起来。系列如下:

import pandas as pd
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
series = pd.Series(quantities, index=timestamps)

显然时间戳有3 values of 11 value of 23 values of 31 value of 1。我想生成以下系列:

1.重复索引值之和:

pd.Series([12,6,17,0], index=[1,2,3,4])

2。重复索引值的中位数:

pd.Series([2,6,7,0], index=[1,2,3,4])

2。重复索引值个数:

pd.Series([3,1,3,1], index=[1,2,3,4])

numpy 中,我将使用 unique_elements_to_indices 方法实现此目的:

from typing import Dict
import numpy as np
def unique_elements_to_indices(array: np.array) -> Dict:
    mapping = {}
    for unique_element in np.unique(array):
        mapping[unique_element] = np.where(array == unique_element)[0]
    return mapping

...然后我将遍历 unique_elements 并使用 np.where 找到给定 unique_element.

quantities

有什么办法可以在 pandas 内快速实现这个目标吗?

谢谢。

这里可能使用函数 summedian 用于单独输出,参数 level=0 用于按索引聚合:

print (series.sum(level=0))
print (series.median(level=0))

但一般按索引聚合,函数为:

print (series.groupby(level=0).sum())
print (series.groupby(level=0).median())
#difference between count and size is count exclude NaNs values
print (series.groupby(level=0).size())

print (series.groupby(level=0).count())

如果需要一起创建新的 DataFrame,请使用 GroupBy.agg 和聚合函数列表:

print(series.groupby(level=0).agg(['sum', 'median', 'size']))

您可以为此使用 .groupby

import pandas as pd
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
sr = pd.Series(quantities, index=timestamps)

print(sr.groupby(sr.index).sum())
print(sr.groupby(sr.index).median())
print(sr.groupby(sr.index).count())

当您使用 pandas 库时,建议将您的数据转换为数据框。最简单的方法如下 pandas

timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
d = {'quantities': quantities, 'timestamps': timestamps}
df = pd.DataFrame(d)
df.groupby('timestamps').sum().reset_index()

类似的方法你也可以使用其他功能。如果这对你有用,请告诉我。