编程语言
首页 > 编程语言> > 如何在Python pandas中重塑此数据集?

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

标签:python,pandas,pivot,reshape,munge
来源: https://codeday.me/bug/20190722/1499927.html