Pandas:合并重复的索引值

ale*_*wis 2 python sum unique median 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)
Run Code Online (Sandbox Code Playgroud)

显然,时间戳有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])
Run Code Online (Sandbox Code Playgroud)

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

pd.Series([2,6,7,0], index=[1,2,3,4])
Run Code Online (Sandbox Code Playgroud)

2、重复索引值的数量:

pd.Series([3,1,3,1], index=[1,2,3,4])
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

...然后我将循环遍历unique_elements并使用np.where来定位quantities给定的unique_element

请问有什么办法可以在 pandas 中快速实现这一目标吗?

谢谢。

jez*_*ael 5

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

print (series.sum(level=0))
print (series.median(level=0))
Run Code Online (Sandbox Code Playgroud)

但通常按索引与函数聚合:

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())
Run Code Online (Sandbox Code Playgroud)

如果需要将新的 DataFrameGroupBy.agg与聚合函数列表一起使用:

print(series.groupby(level=0).agg(['sum', 'median', 'size']))
Run Code Online (Sandbox Code Playgroud)