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'})
a mean_value
0 A 4
1 B 6
2 C 5
df.groupby('a',as_index=False)['b'].agg({'mean_value':'mean','max_vale':'max'})
a mean_value max_vale
0 A 4 7
1 B 6 9
2 C 5 8
df['rank']=df.groupby('a')['b'].rank(ascending=False)
df
a b c rank
0 A 1 1 3.0
1 B 3 2 3.0
2 C 5 3 2.0
3 A 7 4 1.0
4 B 9 5 1.0
5 C 2 6 3.0
6 A 4 7 2.0
7 B 6 8 2.0
8 C 8 9 1.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_1 data_2 key1 key2
0 2 7 a one
1 3 5 a two
2 5 9 b one
3 1 6 b two
4 4 6 a one
tmp=df.groupby(['key1','key2'],as_index=False)['data_1']\
.agg({'max_value':'max','mean_value':'mean'})
tmp
key1 key2 max_value mean_value
0 a one 4 3
1 a two 3 3
2 b one 5 5
3 b two 1 1
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

1
key1            a
key2          two
max_value       3
mean_value      3
Name: 1, dtype: object

2
key1            b
key2          one
max_value       5
mean_value      5
Name: 2, dtype: object

3
key1            b
key2          two
max_value       1
mean_value      1
Name: 3, dtype: object

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
buy cnt day item_id
0 5 10 1 A
1 4 20 2 A
2 8 32 3 A
3 6 30 1 B
4 4 16 2 B
5 2 4 3 B
6 12 16 1 C
7 18 30 2 C
8 10 20 3 C
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_id item_idbuy1 item_idbuy2 item_idbuy3 item_idcnt1 item_idcnt2 item_idcnt3
0 A 5 4 8 10 20 32
1 B 6 4 2 30 16 4
2 C 12 18 10 16 30 20

你可能感兴趣的:(python,学习笔记)