zoukankan      html  css  js  c++  java
  • 【python】numpy pandas 用法

    【duplicated保留所有行】

    df.duplicated(keep=False)

    【pivot_table使用】

    index = 需要groupby的东西

    values = 有用的东西

    columns = 放在column上的index

    pd.pivot_table(df,index=[字段1],values=[字段2],aggfunc=[函数],fill_value=0)
    df.groupby([字段1])[字段2].agg(函数).fillna(0)

    以上两个表述完全等价

    【将某个column设为index】

    df.set_index('columnName', inplace=True)

    【根据其中某几列合并两个dataFrame】

    recordsAll = pd.merge(records1, records2, on=['symbol', 'updateDate'], how='left')

    【根据值group】

    series.value_counts()

    【pivot的逆操作】/ 【将multiindex转化为columns】

    df_pivot.stack([1,2]).reset_index()

    【将daily数据按照tick数据对齐】

    dateIndex = residualSys.index.date
    adjfactorTick = adjfactor.reindex(index=dateIndex)
    adjfactorTick.index = residualSys.index

    【multiIndex:  取levels[0]】

    如果看set,用 df.index.levels[0]

    如果跟index等长,用df.index.get_level_values(0)

    【drop index duplicated】

    >>> %timeit df3.reset_index().drop_duplicates(subset='index', keep='first').set_index('index')
    1000 loops, best of 3: 1.54 ms per loop
    
    >>> %timeit df3.groupby(df3.index).first()
    1000 loops, best of 3: 580 µs per loop
    
    >>> %timeit df3[~df3.index.duplicated(keep='first')]
    1000 loops, best of 3: 307 µs per loop

    【value map】

    用df.replace(dict)可以解决。但是如果dict太大,会非常非常慢。

    【level调换】

    df = df.swaplevel(0, 1, axis=1).sort_index(axis=1)

    【array相加的维度规律】【广播】

    (2,3) 能和 (3,) 相加,不能和(2,)相加

    (2,3) 能和 (2, 1) (1, 3)相加,

    同理,对于三维数组来说

    (2, 3, 4)能和(4, ) (3,4)相加 —— 高维和低维相加的时候,低维默认是从后面数的维数

    (2,3,4)能和(2,3,1) (2,1,4) (1,3,4)相加

    (2,3,4)能和(2,1,1) (1,3,1) (1,1,4)相加

    【panel取出dataFrame的index和columns问题】

    假设(2,3,4)的panel([0,1], [a,b,c], [d,e,f,g])

    按第一维取, 没问题([a,b,c], [d,e,f,g])

    按第二维取,第三维是Index ([d,e,f,g], [0,1])

    按第三维取,第二维是Index ([a,b,c], [0,1])

    【按条件取数组】

    df1[df2 == 0.], 那么df2 !=  0.的部分会置为np.nan

    【numpy数组合并】

    1、横向

    >>> np.hstack((a,b))
    >>> np.concatenate((a,b),axis=1)

    2、纵向

    >>> np.vstack((a,b))
    >>> np.concatenate((a,b),axis=0)

    【添加记录与记录合并】

    dataFrame添加一条记录:df.loc[index] = columnsList

    不看index的添加一条记录:df = df.append(series, ignore_index=True)

    dataFrame记录合并:df = df.append(df2, ignore_index=True)

    【upsert记录】

    df = pd.concat([ df1[~df1.index.isin(df2.index)], df2 ])

    【2维数据转化为3维数组】

    df1 = df[None, :]
    等价于df1 = df.reshape(1, x, x)

    df2 = np.repeat(df1, n, axis=0)

    【3维数据转化为2维数据】

    pd.Panel().to_frame()

    但是比较大的数据可能会出问题。

    如果使用numpy, 比如转换 n * m * 3的数据为 3 * (n*m) 的数据:

    参考https://stackoverflow.com/questions/32838802/numpy-with-python-convert-3d-array-to-2d

    首先使用 np.transpose 把 n * m * 3 转换为 3 * n * m,data.transpose(2, 0, 1)

    然后用reshape(3, -1)解决。

    【numpy drop na】

    drop列

    xNew1 = xNew[:, ~(np.isnan(xNew).all(axis=0))]

    drop行

    xNew1 = xNew[~(np.isnan(xNew).all(axis=1))]

    【按天操作】

    df.resample('d').sum()

    【ewma的用法】

    alpha = 1 / (1+com) = 2 / (1+span) = 1 - exp(log(0.5) / halflife)

    对于span=3来说

    x = range(n)

    y大致上为x-1,因此相当于最新3个平均

    如果adjust:(default)

    weights:   (1-alpha)**(n-1) , ... , (1-alpha), 1 加权

    如果alpha=1, 那么等于本身

    如果alpha=0, 那么等于平均

    如果n足够大, alpha=1/2,  那么权重为1/2, 1/4, 1/8 ...

    如果n足够大,alpha=1/3 那么权重为1/3, 2/9, 4/27 ...

    alpha越大, 本身的权重越大。

    如果不adjust:

    weights: y[i] = alpha * x[i] + (1 - alpha) * y[i-1], y[0] = x[0]

    【一些trick】

    panel当dtype不是object的时候,.loc = xxx 会出现奇怪的问题。

    【pandas不包含的切片】

    x[x.index < startDate] = np.nan

  • 相关阅读:
    vue 遇到的问题
    vue webpack添加jQuery
    如何将在线电子书保存为pdf格式
    swagger 支持动态host和basePath
    本地chrome调试服务器node
    滚动页面一定距离后固定导航条
    发布-订阅模式
    react生命周期
    redux
    原型及继承
  • 原文地址:https://www.cnblogs.com/yesuuu/p/6226315.html
Copyright © 2011-2022 走看看