微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Python pandas中重塑此数据集?

假设我有这样的数据集:

is_a  is_b  is_c  population infected
1     0     1     50         20
1     1     0     100        10
0     1     1     20         10
...

我如何重塑它看起来像这样?

feature  0       1 
a        10/20   30/150
b        20/50   20/120
c        10/100  30/70
...

在原始数据集中,我将a,b和c作为各自独立的列.在转换后的数据集中,列功能下列出了这些相同的变量,并生成了两个新列0和1,对应于这些功能可以采用的值.

在is_a为0的原始数据集中,添加受感染的值并将其除以总体值.其中is_a为1,执行相同操作,添加受感染的值并按人口值除以它们.冲洗并重复is_b和is_c.新数据集将具有如下所示的这些分数(或小数).谢谢!

我已经尝试过pd.pivot_table和pd.melt,但没有什么能接近我需要的东西.

解决方法:

在做了wide_to_long之后,你的问题就更清楚了

df=pd.wide_to_long(df,['is'],['population','infected'],j='feature',sep='_',suffix='\w+').reset_index()
df
  population  infected feature is
0          50        20    a   1
1          50        20    b   0
2          50        20    c   1
3         100        10    a   1
4         100        10    b   1
5         100        10    c   0
6          20        10    a   0
7          20        10    b   1
8          20        10    c   1

df.groupby(['feature','is']).apply(lambda x : sum(x['infected'])/sum(x['population'])).unstack()
is      0         1
feature
a     0.5  0.200000
b     0.4  0.166667
c     0.1  0.428571

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐