• pandas 怎么样扩展数据,就是把加权数据,转换成个案数据


    之前一直用stata,觉得有一个很好用的功能呢,就是expand,

    具体来说就是,比如有一个交叉表,是这样的。

    这是风笑天社会研究方法一书里的例子,我想把这个数据变成个案数据,让学生练习,首先,你的按照百分比,计算出每一个格子的绝对数,大概是这么多。

     

    如果使用spss统计的话,spss菜单里有一个weight 菜单。可以很轻松的解决这个问题。不需要把加权数据变成个案数据。

    但是如果使用excel的话,就不行,我向把数据变成这样的,

     就是变成单独一个人的,通俗的理解就是把权重这个频数,直接打散,还原成1787个个案数据,这样在excel里可以使用数据透视表的功能。

     

    那么怎么把这个weight过的数据,还原。其实以前用stata,很方便。

     

     

    只需要两句。

    最近这些年很少用stata。

    尝试用python做一下。

    但是这个需求真的很偏,太少有人论述这个了。网上找不到合适的。我感觉python应该是有一个简单的语句就可以实现的。但是,实在找不到,不知道有没有大神可以指点我一下。

    我自己是这样做的,用的是pandas的explode。

     

    1. dctX = {
    2. "独生|不做饭": [1] * 421,
    3. "独生|做饭": [2] * 197,
    4. "非独生|不做饭":[3] * 661,
    5. "非独生|做饭": [4] * 508,
    6. }
    7. pd.DataFrame([dctX]).T
    8. df = pd.DataFrame([dctX]).T
    9. df
    10. df.columns = ['a']
    11. df
    12. df2 = df.explode('a')
    13. df2.shape
    14. df2 = df2.reset_index()
    15. df2
    16. df2['dusheng'] = df2['index'].str.split("|")
    17. df2['index'].str.split("|")[0]
    18. df2
    19. df2['dusheng']
    20. df2['ds'] =[ x[0] for x in df2['dusheng']]
    21. df2['ds']
    22. df2
    23. df2['zuofan'] =[ x[1] for x in df2['dusheng']]
    24. df2
    25. df3 = df2[['ds', 'zuofan']]
    26. df3
    27. pd.crosstab(df3['ds'], df3['zuofan'])

    得到的结果df3, 就是上面的图。

    用起来还行。也算是一种解决方法吧。

  • 相关阅读:
    【免费个人网站制作】免费个人网站如何制作?
    字节抖音电商 后端开发岗位 一面
    详解AVL树,图文并茂
    记一次 .NET 某电力系统 内存暴涨分析
    java运算符
    P1747 好奇怪的游戏
    解决gif导出后显示异常的现象
    Spring Cloud Alibaba 使用Gateway作为服务网关
    cesium wgs84 经纬度转笛卡尔坐标
    Camera1 源码解析系列(五)—— Camera1 takePicture() 流程解析
  • 原文地址:https://blog.csdn.net/weixin_40340586/article/details/125004467