如何使用 pandas 处理多索引数据

How to process data with multiindex using pandas

我有一个这样的系列。

我想处理这个系列以获得每个 ip 的最大值 p

结果:

ip 192.168.1.1 22 192.168.1.2 4 192.168.1.3 3 192.168.1.4 4

有什么方法可以轻松做到这一点?

您要找的是 pandas groupby clause: s.groupby(level=0).max()

示例:

iterables = [['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4'],
             ['123455', '123456', '123457']]
index = pd.MultiIndex.from_product(iterables, names=['ip', 'p'])
s = pd.Series(np.random.randint(30, size=12), index=index)
s

输出:

ip           p     

192.168.1.1  123455    18
             123456    20
             123457    12
192.168.1.2  123455    25
             123456     1
             123457     4
192.168.1.3  123455    28
             123456    19
             123457    22
192.168.1.4  123455    20
             123456    10
             123457    12

并获取每个 IP 的最大值:

s.groupby(level=0).max()

输出:

ip
192.168.1.1    20
192.168.1.2    25
192.168.1.3    28
192.168.1.4    20

编辑: 已从 s.groupby['ip'].max() 更改为 s.groupby(level=0).max(),因为我所做的一些测试没有起作用

如果 ip 在索引中(在第一个位置),您应该使用此语法。

s.groupby(level=0).max()

# ip
# 192.168.1.1    22
# 192.168.1.2     4
# 192.168.1.3     3
# 192.168.1.4     4
# Name: p, dtype: int64