pandas高级用法

一、分类

1.使用转换函数:astype('category')

df['fruit'] = df['fruit'].astype('category')

2.直接创建分组

方式一:

my_categories = pd.Categorical(['foo', 'bar', 'baz', 'foo', 'bar'])

方式二:

categories = ['foo', 'bar', 'baz']
codes = [0, 1, 2, 0, 0, 1]
my_cats_2 = pd.Categorical.from_codes(codes, categories,ordered=True)

 

二、分类计算

category在计算过程中会有更好的表现。

cat_s.cat.codes :分类的编码,用数字表示分类数据

cat_s.cat.categories:分的类别

cat_s.cat.set_categories:重新设定分类标准

actual_categories = ['a', 'b', 'c', 'd', 'e']
cat_s2 = cat_s.cat.set_categories(actual_categories)

cat_s.value_counts():统计值的个数

cat_s3 = cat_s[cat_s.isin(['a', 'b'])] :分类筛选

cat_s3.cat.remove_unused_categories():删除无用的分类

pd.get_dummies(cat_s):创建分类虚拟矩阵

 

三、group.transform(Function)

#作用:分组数据每一个数据都显示运行的结果。如求平均值,则每组的每个值都显示平均值

 

四、时间序列分组

方式一:

df.set_index('time').resample('5min').count()

方式二:

time_key = pd.TimeGrouper('5min')

resampled = (df2.set_index('time').groupby(['key', time_key]).sum())

 

五、连续的方法操作

方式一:

result = (load_data()[lambda x: x.col2 < 0].assign(col1_demeaned=lambda x: x.col1 - x.col1.mean()).groupby('key').col1_demeaned.std())

可以使用【lambda函数筛选行】和assign增加赋值列来减少中间的环节

方式二:pip函数:将上一个计算结果传入下一个pip中

def group_demean(df, by, cols):
  result = df.copy()
  g = df.groupby(by)
  for c in cols:
    result[c] = df[c] - g[c].transform('mean')
  return result

result = (df[df.col1 < 0].pipe(group_demean, ['key1', 'key2'], ['col1']))

 

posted @ 2017-12-19 12:01  tutu_python  阅读(1080)  评论(0)    收藏  举报