# python group操作 **Published by:** [KeepLearning](https://paragraph.com/@keeplearning-2/) **Published on:** 2022-11-28 **URL:** https://paragraph.com/@keeplearning-2/python-group ## Content 1, df.groupby(‘列名‘).size 计算每个group的size 2, .get_group(‘行名‘) 取 3, .describe() 4, df.groupby(‘symbol’).head() 5, .tail()/.first()/.last()/.nth(n)取前几行数据 前面集中都是将groupby对象,也就是symbol设置为index, 如果不想设置symbol为index,则按照下面方式 df.groupby(‘symbol’,as_index = False).nth(2) 取groupby以后,可以取一部分变量就行计算 把相同symbol的行取出来,这些行对应不同的时间,将这些行的close列做平均,得出close在这段时间内的均值。同理对于volume. 应用场景:所有的symbol在一个表里,我们需要知道同一个symbol在某一列的均值。 df.groupby(‘symbol’)[‘close‘, ‘volume‘].mean() df.groupby(‘symbol’)[‘close‘, ‘volume‘].max() df.groupby(‘symbol’)[‘close‘, ‘volume‘].min()计算每个group的加总print(df.groupby('symbol')['volume'].sum())计算该数据在每个group中的排名print(df.groupby('candle_begin_time')['volume'].rank())print(df.groupby('candle_begin_time')['volume'].rank(pct=True))也可以同时用多个变量来进行group,将这些变量的值都相同的行df['candle_begin_time'] = pd.to_datetime(df['candle_begin_time'])df.loc[df['candle_begin_time'].dt.hour < 12, '时间'] = '上午'df['时间'].fillna(value='下午', inplace=True)print(df.groupby(['symbol', '时间']).size())我们之前讲过的resample、fillna、apply等常见操作,在group里面都可以进行。这些操作需要大家有一定的积累,若直接在group上进行这些操作不熟练,可以使用已下的方式。遍历group,对每个group进行单独操作,然后将这些group合并起来。语法:for key, group in df.groupby('列名'):for symbol, group in df.groupby('symbol'):print(symbol)print(group)# 以下可以对各个group进行任意操作。# group.fillna()# group.apply()# 操作完之后,将这些group再append起来在一开始不熟练的时候,可以多用遍历每个group的方式 ## Publication Information - [KeepLearning](https://paragraph.com/@keeplearning-2/): Publication homepage - [All Posts](https://paragraph.com/@keeplearning-2/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@keeplearning-2): Subscribe to updates