Python:是否可以在生成的序列中找到最大值,而不必将序列存储到内存中?

Python:是否可以在生成的序列中找到最大值,而不必将序列存储到内存中?,python,pandas,Python,Pandas,我试图找到数据帧中某列计算的最大值。为此,我创建了计算列,然后对其调用max() df['two']=df['one']/df['one'].索引 最大值=df['two'].max() 这是一个缓慢的操作,我想知道是否有可能通过避免计算列的内存使用来对其进行优化,并且只需动态计算列,同时跟踪其最大值。我可以用香草蟒蛇做这个,但是我想要熊猫的效率 谢谢所有能帮助我的人 我们可以尝试作弊,但我们需要知道确切的公式/算法 在您的示例中,可以在不存储列的情况下执行此操作: maximum = (df.

我试图找到数据帧中某列计算的最大值。为此,我创建了计算列,然后对其调用
max()

df['two']=df['one']/df['one'].索引
最大值=df['two'].max()

这是一个缓慢的操作,我想知道是否有可能通过避免计算列的内存使用来对其进行优化,并且只需动态计算列,同时跟踪其最大值。我可以用香草蟒蛇做这个,但是我想要熊猫的效率


谢谢所有能帮助我的人

我们可以尝试作弊,但我们需要知道确切的公式/算法

在您的示例中,可以在不存储列的情况下执行此操作:

maximum = (df.a/df.index).max()
如果计算更复杂,可以使用
.assign()
方法:

maximum = df.assign(two=df.a/df.index)['two'].max()
测试:


问题在于,为了提高处理效率,您牺牲了内存中的效率

你可以写一个循环

maximum = np.nan
for i in range(len(df.a)):
    if pd.isnull(maximum):
        maximum = df.a[i] / df.index[i]
    else:
        maximum = max(maximum, df.a[i] / df.index[i])

这应该是非常有效的内存。它使用
iterrows
max
的生成器

np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc'))

df
Out[107]: 
          a         b         c
0  1.764052  0.400157  0.978738
1  2.240893  1.867558 -0.977278
2  0.950088 -0.151357 -0.103219
3  0.410599  0.144044  1.454274
4  0.761038  0.121675  0.443863

>>> max(row.a / idx for  idx, row in df.iterrows() if idx)
2.2408931992014578

如果idx
要删除分母为零或无的实例。

谢谢,这是最有效的!
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc'))

df
Out[107]: 
          a         b         c
0  1.764052  0.400157  0.978738
1  2.240893  1.867558 -0.977278
2  0.950088 -0.151357 -0.103219
3  0.410599  0.144044  1.454274
4  0.761038  0.121675  0.443863

>>> max(row.a / idx for  idx, row in df.iterrows() if idx)
2.2408931992014578