如果行计数大于1,则在Group By上应用自定义函数

时间:2017-04-07 08:57:46

标签: python pandas numpy dataframe

如果我只想在组成员数大于1的组上应用该功能,如何在对数据帧进行分组后将其应用于数据框。

e.g

 df1 = df.groupyby(['x','y']).count() > 1.apply(f)

 f(x) :
   do something

其次传递给函数的是什么 - 它是组中的元素还是组本身。

1 个答案:

答案 0 :(得分:1)

我认为你需要size

df1 = df.groupby(['x','y']).size()

df1[df1 > 1] =  df1[df1 > 1].apply(f)

What is the difference between size and count in pandas?

样品:

df = pd.DataFrame({'x':[1,1,3],
                   'y':[5,5,6],
                   'C':[7,8,9]})

print (df)
   C  x  y
0  7  1  5
1  8  1  5
2  9  3  6

def f(x) :
   return x + 2
df1 = df.groupby(['x','y']).size()

s = df1[df1.COUNT > 1].set_index('x')['y']
print (s)
x
1    5
Name: y, dtype: int64

mask = df.set_index('x')['y'].isin(s).values
print (mask)
[ True  True False]

df[mask] = df[mask].apply(f)
print (df)
    C  x  y
0   9  3  7
1  10  3  7
2   9  3  6