Python 在循环中使用lambda创建聚合

Python 在循环中使用lambda创建聚合,python,Python,假设我有这样一个数据帧: v1 v2 a 1 a 1 b 1 b 2 我想对v1进行分组,并对v2中的每个可能值进行计数。 所以结果会是这样的: v2 1 2 v1 a 2 0 b 1 1 我可以这样做 df.groupby("v1")\ .agg( { "v2": { "0": lambda x: sum(x==0), "1": lambda x: sum(

假设我有这样一个数据帧:

 v1 v2
 a  1
 a  1
 b  1
 b  2
我想对v1进行分组,并对v2中的每个可能值进行计数。 所以结果会是这样的:

    v2    
     1  2
 v1
  a  2  0 
  b  1  1
我可以这样做

df.groupby("v1")\
.agg(
    {
    "v2": {
             "0": lambda x: sum(x==0),
             "1": lambda x: sum(x==1)
           }
    }
} 
但是如果值的数量很大,或者发生了变化,那就不太好了! 我已经看到了这一点,但无法使用我的示例

谢谢你的帮助:)

如果我没有错,
您不需要agg函数来获得此结果 您只需要按v1和v2分组。解开它

v1 = 'a a b b'.split()
v2 = '1 1 1 2'.split()
import pandas as pd

df = pd.DataFrame({'v1': v1,
                   'v2': v2})

print(df)
g = df.groupby(['v1', 'v2'])
print(g.size().unstack())
这会回来的

v2    1    2
v1          
a   2.0  NaN
b   1.0  1.0
填补空缺

print(g.size().unstack().fillna(0))
v2    1    2
v1          
a   2.0  0.0
b   1.0  1.0

最有效的方法是交叉表法:

pd.交叉表(df['v1'],columns=df['v2'])

结果

v2  1  2
v1
a   2  0
b   1  1