• 第十四课:Pandas(2)行情数据处理,DataFrame合并去重以及计算涨跌幅


    https://www.bilibili.com/video/BV1Kx411Z7eu?t=750

     

    import  pandas as pd
    import os
    curren_dir=os.path.dirname(os.path.dirname(__file__))
    print(curren_dir)
    print(os.path.dirname(__file__))
    df=pd.read_excel('test20210428_Test.xlsx')
    #axis=0或者1 纵向排序还是横
    #f=df.sort_values(by='tradate',ascending=False)
    #对数据进行排序,用到了sort_values函数,by参数可以指定根据哪一列数据进行排序,ascending是设置升序和降序(选择多列或者多行排序要加[],把选择的行列转换为列表,排序方式也可以同样的操作)。
    #inplace=True 原则替换
    #将NAN值转换为0
    
    fillna=df.fillna(0)
    df.sort_values(by=['tradate'],ascending=True,inplace=True)
    df['close11']=df['close'].shift(1)
    print(df)
    #删除列
    df.drop(['close11'],axis=1,inplace=True)
    print(df)
    #涨跌 diff的参数只有一个periods,控制偏移位置,即与间隔几个的差值(可以为负数,默认为1)
    df['shift_1']=df['close'].shift(1)
    print(df)
    df['涨跌']=df['close'].diff(1)#等价
    df['涨跌1']=df['close']-df['shift_1']#等价
    print(df)
    #涨跌幅度
    df['涨跌幅']=df['close'].pct_change(-1)
    df['涨跌幅1']=(df['close']-df['shift_1'])/df['shift_1']
    print(df)
    #累加 需要按日期升序
    df['volume_cum']=df['volume'].cumsum()
    print(df[['tradate','volume','volume_cum']])
    
    #累乘 需要按日期升序
    df['volume_prod']=(df['涨跌幅']+1).cumprod()
    print(df[['tradate','涨跌幅','volume_prod']],)
    import pandas as pd
    data = [12,5,8,2,8,2,8,2,8,2,8,5,84]
    data1 = [12,5,8,56,57,58,59,22,84,24,85,56,87]
    df1=pd.DataFrame(data,columns=['num'])
    df2=pd.DataFrame(data1,columns=['num'])
    # print(data1)
    df=pd.DataFrame(data,columns=['num'])
    df.sort_values(by=['num'],ascending=1,inplace=True) #1升序排序 0降序
    #排序函数
    df['cum']=df['num'].cumsum()
    df['prod']=df['num'].cumprod()
    print(df.sort_values(by=['num','cum'],ascending=[1,0]) )#按多列排序
    #多个DataFrame 上下合并操作,append操作
    df3=df1.append(df2) #index不连续index是可以重复的,需要得新设置index索引值
    df4=df1.append(df2,ignore_index=True)#ignore_index 重新设置index
    print(df4)
    #对数据进行去重
    
    df4.drop_duplicates(subset=['num'],
    keep='first',#first 只保留第一行出现的值,last最后一行的值 ,false一行都不保留
    inplace=True
    )
    print('first22',df4)

    pandas删除满足条件所在的行

     df_clear = df.drop(df[df['predict']=='####'].index)

    # 多个条件

    df_clear = df.drop(df[(df['predict']=='####') | (df['predict']=='车位充足')].index)

     数据合并

    res = pd.merge(res, mana_type_size, on=['MNG_ID', 'FND_TYPE'], how='left')
    多个条件同时满足,&,或关系用|
    data_mng = df[(df['MNG_ID'] == i['MNG_ID']) & (df['MANA_CODE'] == i['MANA_CODE'])].to_dict('records')

    pandas获取groupby分组里最大值所在的行

    https://blog.csdn.net/mappy93/article/details/79319506/
    # dg=df.groupby('MNG_ID').apply(lambda t:t[t.RESI_DATE==t.RESI_DATE.max()])
    df_gy=df.iloc[df.groupby('MNG_ID').apply(lambda x: x['RESI_DATE'].idxmax())]

    1、python中数据框求每列的最大值和最小值

    df.min()
    df.max()

  • 相关阅读:
    .Net4.0并行库介绍——线程专有存储
    解决WPF中TextBox文件拖放问题
    POJ 2063 Investment(完全背包)
    HDU 1698 Just a Hook(线段树,成段更新)
    HDU 2665 Kth number(划分树入门题,纯套模板)
    HDU 4251 The Famous ICPC Team Again(划分树入门题)
    POJ 3295 Tautology(构造法)
    HDU 1540 Tunnel Warfare(线段树,去最大连续区间)
    HDU 1394 Minimum Inversion Number(求逆序数,线段树或者树状数组)
    POJ 2993 Emag eht htiw Em Pleh(水模拟)
  • 原文地址:https://www.cnblogs.com/gina11/p/14736158.html
Copyright © 2020-2023  润新知