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