在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
答案 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