如何在Pandas中执行groupby和选择unique?

2024-10-03 09:08:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个航班数据集,其中包含“唯一的航空公司名称”、“月份年份”、“航线”和其他属性,如乘客数量等,这些属性在本例中与我无关。以下是一个示例(还有许多其他运营商,日期范围到2017年):

           UNIQUE_CARRIER_NAME MONTH_YEAR    ROUTE
2512    ATA Airlines d/b/a ATA     2-1990  OGG-HNL
2648    ATA Airlines d/b/a ATA     2-1990  IND-RSW
2649    ATA Airlines d/b/a ATA     2-1990  IND-RSW
2650    ATA Airlines d/b/a ATA     2-1990  IND-RSW
3104    ATA Airlines d/b/a ATA     2-1990  HNL-SFO
3470    ATA Airlines d/b/a ATA     2-1990  SFO-HNL
3482    ATA Airlines d/b/a ATA     2-1990  SFO-OGG
4522    ATA Airlines d/b/a ATA     3-1990  OGG-HNL
5076    ATA Airlines d/b/a ATA     2-1990  RSW-IND
5077    ATA Airlines d/b/a ATA     2-1990  RSW-IND
5078    ATA Airlines d/b/a ATA     2-1990  RSW-IND
5296    ATA Airlines d/b/a ATA     3-1990  RSW-IND
5297    ATA Airlines d/b/a ATA     3-1990  RSW-IND
5371    ATA Airlines d/b/a ATA     3-1990  SFO-HNL
5389    ATA Airlines d/b/a ATA     3-1990  SFO-OGG
....

我希望能够在Python中按这个序列按“UNIQUE_CARRIER_NAME”、“MONTH_YEAR”、“ROUTE”分组。我写了这个:

^{pr2}$

这将返回一个DataFrameGroupBy对象,我可以使用它来迭代对路由数据执行一些计算——有没有任何方法可以选择不聚合数据(对于其余列)而只选择groupby函数中的唯一路由?这3行只能选为1。在

2648    ATA Airlines d/b/a ATA     2-1990  IND-RSW
2649    ATA Airlines d/b/a ATA     2-1990  IND-RSW
2650    ATA Airlines d/b/a ATA     2-1990  IND-RSW

我想迭代这组按“唯一的”承运人“名称”,“月份”“年份”分组的数据帧,这样我就可以:

for each group of DataFrame:
    I have a subset of df which I can run a function on ROUTE to get some results

Tags: 数据名称属性routeunique年份indcarrier
2条回答

我认为您需要先^{},然后再^{}您的函数(只需要一些示例函数,因为没有关于它的信息):

def func(x):
    print (x)
    #apply your function 
    #some sample function 
    x['ROUTE'] = x['ROUTE'] + 'a'
    return x 

df = df.drop_duplicates(['UNIQUE_CARRIER_NAME','MONTH_YEAR','ROUTE'])
df = df.apply(func, axis=1)
print (df)
         UNIQUE_CARRIER_NAME MONTH_YEAR     ROUTE
2512  ATA Airlines d/b/a ATA     2-1990  OGG-HNLa
2648  ATA Airlines d/b/a ATA     2-1990  IND-RSWa
3104  ATA Airlines d/b/a ATA     2-1990  HNL-SFOa
3470  ATA Airlines d/b/a ATA     2-1990  SFO-HNLa
3482  ATA Airlines d/b/a ATA     2-1990  SFO-OGGa
4522  ATA Airlines d/b/a ATA     3-1990  OGG-HNLa
5076  ATA Airlines d/b/a ATA     2-1990  RSW-INDa
5296  ATA Airlines d/b/a ATA     3-1990  RSW-INDa
5371  ATA Airlines d/b/a ATA     3-1990  SFO-HNLa
5389  ATA Airlines d/b/a ATA     3-1990  SFO-OGGa

不需要分组。只需使用以下方法删除数据帧中的副本:

df = df.drop_duplicates(subset=['UNIQUE_CARRIER_NAME','MONTH_YEAR','ROUTE'])

相关问题 更多 >