之前一直用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, 就是上面的图。
用起来还行。也算是一种解决方法吧。