Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按特定数据帧列分组_Python_Pandas_Dataframe - Fatal编程技术网

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
也是函数。我很困惑,因为“”符号