pandas的dataframe中的常用函数与练习

本文详细介绍Pandas库中groupby、value_counts等函数的应用,包括统计聚合操作、索引设置与转换等内容,帮助读者掌握数据处理核心技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

groupby

这个函数的输入一般为dataframe的某一列,输出为以输入列属性值作为index的其余列的统计量。用于和多种函数连用,进而表示一些统计量,如果直接输出groupby的结果,输出:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000016E4D3D4E48>

我们在这里需要将value_counts是统计每列有多少个不同值,并计算每个不同值有在该列中有多少重复值,输出仍然为dataframe类型,不同值作为index,列名与输入值相同,内容是不同列出现的不同值的重复次数。下图上半部分的是value_counts的结果,下部分是groupby.count()的结果

num = df['司机'].value_counts()
print(num)
num = df.groupby(['司机']).count()
print(num)
"""df_driver = pd.DataFrame({'driver':num[0],'num':num[1]})
print(df_driver)"""
num.plot(kind = 'box')

在这里插入图片描述

常用的函数

常用的用一下四种,作用分别是:统计同行的可以求和的总和,统计同行的平均值,统计这一种属性出现的次数(NaN也包含在内),统计这一种属性出现的次数(NaN不包含在内)

import pandas as pd
column_1 = [1,2,3,9,None]
column_2 = ['hunan','hubei','beijing','hunan','beijing']
column_3 = ['wzy','hmz','wjc','cxy','zyy']

df = pd.DataFrame({'省份' : column_2, '人数' : column_1,'name':column_3})

print(df.groupby('省份').sum())
print(df.groupby('省份').mean())
print(df.groupby('省份').size())
print(df.groupby('省份').count())

结果为:

           人数
省份           
beijing   3.0
hubei     2.0
hunan    10.0
          人数
省份          
beijing  3.0
hubei    2.0
hunan    5.0
省份
beijing    2
hubei      1
hunan      2
dtype: int64
         人数  name
省份               
beijing   1     2
hubei     1     1
hunan     2     2

set_index

DataFrame可以通过set_index方法,可以设置单索引和复合索引。 所有的参数如下:

DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False) 
In [1]: data
Out[1]: 
     a    b  c    d
0  bar  one  z  1.0
1  bar  two  y  2.0
2  foo  one  x  3.0
3  foo  two  w  4.0
 
In [2]: indexed1 = data.set_index('c')
 
In [3]: indexed1
Out[3]: 
     a    b    d
c               
z  bar  one  1.0
y  bar  two  2.0
x  foo  one  3.0
w  foo  two  4.0
 
In [4]: indexed2 = data.set_index(['a', 'b'])
 
In [5]: indexed2
Out[5]: 
         c    d
a   b          
bar one  z  1.0
    two  y  2.0
foo one  x  3.0
    two  w  4.0

keys的输入值为一个列名时,添加了单索引,当添加多个时为复合索引。

stack

stack()是将原来的列索引转成了最内层的行索引,这里是多层次索引:
在这里插入图片描述

reset_index

reset_index可以还原索引,重新变为默认的整型索引,可以视作set_index 的逆运算。

reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=''

简单应用:

In [1]: data
Out[1]: 
         c    d
a   b          
bar one  z  1.0
    two  y  2.0
foo one  x  3.0
    two  w  4.0
 
In [2]: data.reset_index()
Out[2]: 
     a    b  c    d
0  bar  one  z  1.0
1  bar  two  y  2.0
2  foo  one  x  3.0
3  foo  two  w  4.0

但是在复杂一点的情况下有些不同。
level表示需要转化为列的索引,没有加入的则不转化,默认全部转化。

index = pd.MultiIndex.from_tuples([('bird', 'falcon'),
                                   ('bird', 'parrot'),
                                   ('mammal', 'lion'),
                                   ('mammal', 'monkey')],
                                  names=['class', 'name'])
columns = pd.MultiIndex.from_tuples([('speed', 'max'),
                                     ('species', 'type')])
df = pd.DataFrame([(389.0, 'fly'),
                   ( 24.0, 'fly'),
                   ( 80.5, 'run'),
                   (np.nan, 'jump')],
                  index=index,
                  columns=columns)
df
               speed species
                 max    type
class  name
bird   falcon  389.0     fly
       parrot   24.0     fly
mammal lion     80.5     run
       monkey    NaN    jump


df.reset_index(level='class')
         class  speed species
                  max    type
name
falcon    bird  389.0     fly
parrot    bird   24.0     fly
lion    mammal   80.5     run
monkey  mammal    NaN    jump

当存在索引存在无名的下级索引时,如果level取默认值,那么dataframe会自动生成列来装下下级索引,如果指定,那么下级索引会保留:

print(test_df,'\n')
print(test_df.set_index('canteen').stack().reset_index(),'\n')
print(test_df.set_index('canteen').stack().reset_index(level='canteen'),'\n')


   canteen  food_breakfast  food_lunch  food_dinner
0        1               1           4            3 

   canteen         level_1  0
0        1  food_breakfast  1
1        1      food_lunch  4
2        1     food_dinner  3 

                canteen  0
food_breakfast        1  1
food_lunch            1  4
food_dinner           1  3 

练习

   canteen  food_breakfast  food_lunch  food_dinner
0        1               1           4            3

转化为:

   canteen            time  score
0        1  food_breakfast      1
1        1      food_lunch      4
2        1     food_dinner      3

答案:

test_df.set_index('canteen').stack().reset_index().rename(columns={'level_1':'time', 0:'score'})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值