Python 如何按特定数据帧列分组
我有以下数据帧:Python 如何按特定数据帧列分组,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: name style val1 val2 val3 23 sher D 2 5 6 56 sher C 3 2 4 34 David A 1 1 1 47 iamgo B 4 4 3 77 para A 6 4 2 120 moli A 7 2 5 86 para A
name style val1 val2 val3
23 sher D 2 5 6
56 sher C 3 2 4
34 David A 1 1 1
47 iamgo B 4 4 3
77 para A 6 4 2
120 moli A 7 2 5
86 para A 5 4 1
我想使用groupby“name”创建新的数据帧,它将返回以下内容:
style val1 val2 val3
name
sher D,C 3 5 4
David A 1 1 1
iamgo B 4 4 3
para A 6 4 2
moli A 7 2 5
对于“样式”,我想添加值,以防其值不相同(如“para”),
对于“val1”和“val2”,为最大值,
对于“val3”,为最小值,
并重置索引。
这是我的密码:
df.groupby('name').agg({
'style': sum,
'val1': max,
'val2': max,
'val3': min
})
输出:
style val1 val2 val3
name
sher DC 3 5 4
David A 1 1 1
iamgo B 4 4 3
para AA 6 4 2
moli A 7 2 5
我错过了什么
谢谢,使用
join
函数代替sum
:
df1 = df.groupby('name').agg({
'style': ','.join,
'val1': max,
'val2': max,
'val3': min
})
print (df1)
style val1 val2 val3
name
David A 1 1 1
iamgo B 4 4 3
moli A 7 2 5
para A,A 6 4 1
sher D,C 3 5 4
如果需要唯一值,请将值转换为集合:
df2 = df.groupby('name').agg({
'style': lambda x: ','.join(set(x)),
'val1': max,
'val2': max,
'val3': min
})
print (df2)
style val1 val2 val3
name
David A 1 1 1
iamgo B 4 4 3
moli A 7 2 5
para A 6 4 1
sher D,C 3 5 4
谢谢还有,我如何添加另一个名为“外观”的列并计算“名称”的外观?@danan-你认为
df1=df.groupby('name').agg({'style':',')。join,'val1':max,'val2':max,'val3':min,'name':'size'})。rename(columns={'name':'appearance'})
。@jezreal,开始工作了!再次感谢。你能解释一下怎么做吗?为什么使用“name”:“size”返回“name”的计数?“大小”是函数吗?@danan-是的,它是函数-像min
,max
也是函数。我很困惑,因为“”符号