Python groupby的标准方法(如平均值、总和、第一)的列异常是否可能?

Python groupby的标准方法(如平均值、总和、第一)的列异常是否可能?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,这是我的第一个问题,希望我做对了 我有一个包含50多列的数据框,我想在上面使用groupby。 除一列之外的所有列都应使用first()进行分组。 其余列应按mean()分组 这是数据帧的一部分df df = df.iloc[:10,:8] id_x first_name country_x sex height weight score 0 1 Leif SWE 0 177 73 100.0

这是我的第一个问题,希望我做对了

我有一个包含50多列的数据框,我想在上面使用groupby。 除一列之外的所有列都应使用
first()
进行分组。 其余列应按
mean()
分组

这是数据帧的一部分
df

df = df.iloc[:10,:8]

   id_x first_name country_x  sex  height  weight  score
0     1       Leif       SWE    0     177      73     100.0             
1     1       Leif       SWE    0     177      73     112.0             
2     1       Leif       SWE    0     177      73     98.0             
3     1       Leif       SWE    0     177      73     73.5             
4     1       Leif       SWE    0     177      73     50.0             
5     3     Magnus       SWE    0     180      78     45.5             
6     3     Magnus       SWE    0     180      78     72.0             
7     3     Magnus       SWE    0     180      78     83.5             
8     3     Magnus       SWE    0     180      78     95.0             
9     3     Magnus       SWE    0     180      78     115.0   
据我所知,我可以通过使用
df.groupby('id_x').agg()
为每一列使用一个具有所需方法的字典,但这将是一个相当长的字典


那么,有没有一种方法可以对一列(或n列)进行分组并使用标准方法和例外情况呢?

词典可能很长,但您可以通过dict理解简洁地创建词典。首先对所有内容使用
,而不是分组列或特殊列,然后用
的“平均值”添加特殊列。

d = {x: 'first' for x in df.columns.difference(['id_x', 'score'])}
d['score'] = 'mean'

df.groupby('id_x').agg(d)
#     country_x first_name  height  sex  weight  score
#id_x                                                 
#1          SWE       Leif     177    0      73   86.7
#3          SWE     Magnus     180    0      78   82.2

这本词典可能很长,但你可以通过听写理解简洁地创建它。首先对所有内容使用
,而不是分组列或特殊列,然后用
的“平均值”添加特殊列。

d = {x: 'first' for x in df.columns.difference(['id_x', 'score'])}
d['score'] = 'mean'

df.groupby('id_x').agg(d)
#     country_x first_name  height  sex  weight  score
#id_x                                                 
#1          SWE       Leif     177    0      73   86.7
#3          SWE     Magnus     180    0      78   82.2

非常感谢您的快速回复和解决问题!不幸的是,由于声誉不好,我无法提高投票率。不用担心,这是一个明确的问题,所以我很乐意帮忙!快乐编码:谢谢您的快速回复和解决问题!不幸的是,由于声誉不好,我无法提高投票率。不用担心,这是一个明确的问题,所以我很乐意帮忙!快乐编码:D