• Dataframe中按id将同一id的不同行变换成一行


    问题:将如下图1按照s_info_windcode转换成图2

     

     解决方法:先对df进行s_info_windcode的groupby,然后进行unstack操作,columns重命名

    方法一:代码简练,但有点难懂

    分开展示

     

     

     方法二:容易理解,但偏机械

    b = aa.copy()
    df1 = pd.DataFrame(b.groupby('s_info_windcode')['f_prt_stocktotot'].apply(list))
    stock = df1['f_prt_stocktotot'].apply(pd.Series).rename(columns=lambda x:'stocktotot'+str(x+1))  #axis=1 #apply(pd.Series)就会按列分开,每列重命名
    stock.head()
    
    df2 = pd.DataFrame(b.groupby('s_info_windcode')['f_prt_bondtotot'].apply(list))
    bond = df2['f_prt_bondtotot'].apply(pd.Series).rename(columns=lambda x:'bond'+str(x+1))
    bond.head()
    pd.merge(stock,bond,on='s_info_windcode')
    

      发现了自己之前的写法觉得好low

    # cmfassetportfolio_1 = cmfassetportfolio[(cmfassetportfolio['f_prt_enddate']=='2019-09-30')]
    # cmfassetportfolio_2 = cmfassetportfolio[(cmfassetportfolio['f_prt_enddate']=='2019-06-30')]
    # cmfassetportfolio_3 = cmfassetportfolio[(cmfassetportfolio['f_prt_enddate']=='2019-03-31')]
    # cmfassetportfolio_4 = cmfassetportfolio[(cmfassetportfolio['f_prt_enddate']=='2018-12-31')]
    # cmfassetportfolio_5 = cmfassetportfolio[(cmfassetportfolio['f_prt_enddate']=='2018-09-30')]
    
    # dt12 = pd.merge(cmfassetportfolio_1,cmfassetportfolio_2,on='s_info_windcode',how='outer',suffixes=('_1','_2'))
    # dt34 = pd.merge(cmfassetportfolio_3,cmfassetportfolio_4,on='s_info_windcode',how='outer',suffixes=('_3','_4'))
    # dt1234 = pd.merge(dt12,dt34,on='s_info_windcode',how='outer')
    # dt = pd.merge(dt1234,cmfassetportfolio_5,on='s_info_windcode',how='outer')
    

      

  • 相关阅读:
    通过命令行配置samba服务
    新版python logging 封装,支持同时向console,file,socket输出
    python多进程管理DEMO
    注意tornado中的日志操作
    一个简单的python日志服务器
    NoVNC的使用、websockify以及VNC截图
    Oracle——distinct的用法
    C# Excel数据转化为Datatable
    C# winform 无API函数实现系统快捷键
    [转]C# WInForm 无框窗体移动
  • 原文地址:https://www.cnblogs.com/xiaodongsuibi/p/12171646.html
Copyright © 2020-2023  润新知