我在pandas数据帧上运行了两个不同但非常相似的循环,我想知道是否有某种groupby操作可以让我通过避免循环来加快速度。
for x in df.var1:
df[df.var1==x, 'var2'] = np.max(df[df.var1==x, 'var2'])
也就是说,假设有多个行具有相同的var1
值,我想将所有这些行的var2
值设置为var2
获得的最大值在所有这些行。
我觉得我应该能够在没有for循环的情况下做到这一点,但出于某种原因我无法弄清楚如何。想法?
答案 0 :(得分: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