Pandas学习笔记

import pandas as pd
import datetime
import numpy as np
# rank函数
S = pd.Series([3,5,1,9])
S.rank(method='average')
#rank函数返回S中每个元素在所有元素中的排名,按照从小到大顺序。
#3在所有元素中排名第二,9排第四
0    2.0
1    3.0
2    1.0
3    4.0
dtype: float64
S = pd.Series([4,5,1,9,2,5,4])
S.rank(method='average')
#S对象中含有相同的元素时,取相同元素的平均排名作为相同元素的排名
#例如4在所有元素中排第三,则相同的两个4分别排第三和第四,取第三第四的平均数3.5作为相同元素4的最终排名
#5也同样如此!
0    3.5
1    5.5
2    1.0
3    7.0
4    2.0
5    5.5
6    3.5
dtype: float64
S = pd.Series([4,5,1,9,2,5,4])
S.rank(method='min')
#method='min'表示当两个元素相同时,取最低的排名最为相同元素的最终排名
#例如,两个元素4分别排第三和第四,取第三作为元素4的最终排名
0    3.0
1    5.0
2    1.0
3    7.0
4    2.0
5    5.0
6    3.0
dtype: float64
S = pd.Series([4,5,1,9,2,5,4])
S.rank(method='max')
#method='min'表示当两个元素相同时,取最高的排名最为相同元素的最终排名
#例如,两个元素4分别排第三和第四,取第四作为元素4的最终排名
0    4.0
1    6.0
2    1.0
3    7.0
4    2.0
5    6.0
6    4.0
dtype: float64
S = pd.Series([4,5,1,9,2,5,4])
S.rank(method='first')
#method='first'表示当两个元素相同时,按照相同元素出现的先后顺序排名
0    3.0
1    5.0
2    1.0
3    7.0
4    2.0
5    6.0
6    4.0
dtype: float64
S = pd.Series([4,5,1,9,2,5,4])
S.rank(method='dense')
#method='dense'表示相同元素排名相同,并且组与组之间的排名是递增的,即组与组之间的排名相差1
#例如元素4一个排第三,一个排第四,那么元素4最终排名取较小的排名,并且元素5排第四。
0    3.0
1    4.0
2    1.0
3    5.0
4    2.0
5    4.0
6    3.0
dtype: float64
#groupby分组运算
df=pd.DataFrame({'a':['A','B','C','A','B','C','A','B','C'],\
             'b':[1,3,5,7,9,2,4,6,8],\
               'c':[1,2,3,4,5,6,7,8,9]})
df.groupby('a',as_index=False)['b'].agg({'mean_value':'mean'})
amean_value
0A4
1B6
2C5
df.groupby('a',as_index=False)['b'].agg({'mean_value':'mean','max_vale':'max'})
amean_valuemax_vale
0A47
1B69
2C58
df['rank']=df.groupby('a')['b'].rank(ascending=False)
df
abcrank
0A113.0
1B323.0
2C532.0
3A741.0
4B951.0
5C263.0
6A472.0
7B682.0
8C891.0

对分组进行迭代

df=pd.DataFrame({'key1':['a','a','b','b','a'],\
                'key2':['one','two','one','two','one'],\
                'data_1':[np.random.randint(0,8) for i in range(5)],\
                'data_2':[np.random.randint(5,10) for i in range(5)]})
df
data_1data_2key1key2
027aone
135atwo
259bone
316btwo
446aone
tmp=df.groupby(['key1','key2'],as_index=False)['data_1']\
.agg({'max_value':'max','mean_value':'mean'})
tmp
key1key2max_valuemean_value
0aone43
1atwo33
2bone55
3btwo11
for key,df in tmp.groupby('key1',as_index=False):
    print key
    print df
a
  key1 key2  max_value  mean_value
0    a  one          4           3
1    a  two          3           3
b
  key1 key2  max_value  mean_value
2    b  one          5           5
3    b  two          1           1
#DataFrame.iterrows()函数
for index,row in tmp.iterrows():
    print index
    print row
    print type(row)
#index表示行索引,row表示把DataFrame的每一行转换成Series.
0
key1            a
key2          one
max_value       4
mean_value      3
Name: 0, dtype: object
<class 'pandas.core.series.Series'>
1
key1            a
key2          two
max_value       3
mean_value      3
Name: 1, dtype: object
<class 'pandas.core.series.Series'>
2
key1            b
key2          one
max_value       5
mean_value      5
Name: 2, dtype: object
<class 'pandas.core.series.Series'>
3
key1            b
key2          two
max_value       1
mean_value      1
Name: 3, dtype: object
<class 'pandas.core.series.Series'>
tmp=pd.DataFrame({'item_id':['A','A','A','B','B','B','C','C','C'],\
                 'day':[1,2,3,1,2,3,1,2,3],\
                 'buy':[5,4,8,6,4,2,12,18,10],\
                 'cnt':[10,20,32,30,16,4,16,30,20]})
tmp
buycntdayitem_id
05101A
14202A
28323A
36301B
44162B
5243B
612161C
718302C
810203C
item='item_id'
features = []
for key, df in tmp.groupby(item, as_index=False):
    feature = {}
    feature[item] = key
    for index, row in df.iterrows():
        feature[item + 'buy' + str(int(row['day']))] = row['buy']
        feature[item + 'cnt' + str(int(row['day']))] = row['cnt']
    features.append(feature)
#features = pd.DataFrame(features)
features
[{'item_id': 'A',
  'item_idbuy1': 5L,
  'item_idbuy2': 4L,
  'item_idbuy3': 8L,
  'item_idcnt1': 10L,
  'item_idcnt2': 20L,
  'item_idcnt3': 32L},
 {'item_id': 'B',
  'item_idbuy1': 6L,
  'item_idbuy2': 4L,
  'item_idbuy3': 2L,
  'item_idcnt1': 30L,
  'item_idcnt2': 16L,
  'item_idcnt3': 4L},
 {'item_id': 'C',
  'item_idbuy1': 12L,
  'item_idbuy2': 18L,
  'item_idbuy3': 10L,
  'item_idcnt1': 16L,
  'item_idcnt2': 30L,
  'item_idcnt3': 20L}]
pd.DataFrame(features)
item_iditem_idbuy1item_idbuy2item_idbuy3item_idcnt1item_idcnt2item_idcnt3
0A548102032
1B64230164
2C121810163020
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值