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

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

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

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

 

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

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

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

 

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

 

 

只需要两句。

最近这些年很少用stata。

尝试用python做一下。

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

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

 


dctX = {
    "独生|不做饭": [1] * 421,
    "独生|做饭": [2] * 197,
    "非独生|不做饭":[3] * 661,
    "非独生|做饭": [4] * 508,
}

pd.DataFrame([dctX]).T

df = pd.DataFrame([dctX]).T

df
df.columns = ['a']
df
df2 = df.explode('a')
df2.shape
df2 = df2.reset_index()
df2

df2['dusheng'] = df2['index'].str.split("|")
df2['index'].str.split("|")[0]
df2
df2['dusheng']

df2['ds'] =[ x[0] for x in  df2['dusheng']]
df2['ds']
df2
df2['zuofan'] =[ x[1] for x in  df2['dusheng']]
df2
df3 = df2[['ds', 'zuofan']]
df3
pd.crosstab(df3['ds'], df3['zuofan'])

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值