如何在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

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...