pandas:在展开窗口中提取最大值的索引

时间:2017-11-10 18:08:11

标签: python pandas

在pandas DataFrame中,我可以使用扩展窗口创建一个系列B,其中包含另一个系列A的最大值,从第一行到当前一行:

df['B'] = df['A'].expanding().max()

我还可以提取A系列的最大整体值的索引值:

idx_max_A = df['A'].idxmax().value

我想要的是将两者结合起来的有效方法;也就是说,创建一个B系列,它保存从第一行到当前行的A系列最大值索引的值。理想情况下,这样的事情......

df['B'] = df['A'].expanding().idxmax().value

...但是,当然,上述操作失败是因为Expanding对象没有idxmax。有这么简单的方法吗?

编辑:出于说明目的,对于以下DataFrame ...

df = pd.DataFrame([1, 2, 1, 3, 0], index=['a', 'b', 'c', 'd', 'e'], columns=['A'])

...我想创建一个额外的列B,以便DataFrame包含以下内容:

   A  B
a  1  a
b  2  b
c  1  b
d  3  d
e  0  d

2 个答案:

答案 0 :(得分:3)

我相信你可以使用expanding + max + groupby

v = df.expanding().max().A
df['B'] = v.groupby(v).transform('idxmax')

df

   A  B
a  1  a
b  2  b
c  1  b
d  3  d
e  0  d

答案 1 :(得分:0)

似乎idmax是最新版本的熊猫中的一个功能,我还没有。这是一个不涉及groupby或idmax的解决方案

import pandas as pd
import numpy as np
df = pd.DataFrame([1, 2, 1, 3, 0], index=['a', 'b', 'c', 'd', 'e'], columns=['A'])
temp = df.A.expanding().max()

df['B'] = temp.apply(lambda x: temp[temp == x].index[0])
df

    A   B
a   1   a
b   2   b
c   1   b
d   3   d
e   0   d