加速数据帧循环

Nil*_*dat 3 python dataframe pandas

我在一个pandas数据帧上运行了两个不同但非常相似的循环,我想知道是否有某种groupby操作可以让我通过避免循环来加快速度.

for x in df.var1:
    df[df.var1==x, 'var2'] = np.max(df[df.var1==x, 'var2'])
Run Code Online (Sandbox Code Playgroud)

也就是说,假设存在多个具有相同值的行var1,我想将var2所有这些行的值设置为在所有这些行上var2获得的最大值.

我觉得我应该能够在没有for循环的情况下做到这一点,但由于某种原因我无法弄清楚如何.想法?

Zac*_*oss 5

看起来您想要用该列中的最大值替换列,并按另一列中的值进行分组.你应该能够使用groupby()transform(max)获得你想要的东西:

>>> import pandas as pd
>>> df = pd.DataFrame({"var1": [1, 1, 2, 2, 3, 3], 'var2': [1, 2, 3, 4, 5, 6]})
>>> df
   var1  var2
0     1     1
1     1     2
2     2     3
3     2     4
4     3     5
5     3     6
>>> df['var2'] = df.groupby('var1').transform(max)
>>> df
   var1  var2
0     1     2
1     1     2
2     2     4
3     2     4
4     3     6
5     3     6
Run Code Online (Sandbox Code Playgroud)