pandas 如何融化 Dataframe ,使重复项成为与索引对应的值[duplicate]

igetnqfo  于 2023-02-11  发布在  其他
关注(0)|答案(2)|浏览(210)
    • 此问题在此处已有答案**:

How can I pivot a dataframe?(5个答案)
昨天关门了。
我有这个 Dataframe :

df = pd.DataFrame({'Status':['CO','AD','AD','AD','OT','CO','OT','AD'],
                   'Mutation':['H157Y','R47H','R47H','R67H','R62H','D87N','D39E','D39E']})
print(df)
  
  Status Mutation
0     CO    H157Y
1     AD     R47H
2     AD     R47H
3     AD     R67H
4     OT     R62H
5     CO     D87N
6     OT     D39E
7     AD     D39E

我希望 Dataframe 如下所示:

df2 = pd.DataFrame({'Status':['CO','AD','OT'],'H157Y':[1,0,0],'R47H':[0,2,0],'R67H':[0,1,0],
                    'R62H':[0,0,1],'D87N':[1,0,0],'D39E':[1,0,1]})
print(df2)

  Status  H157Y  R47H  R67H  R62H  D87N  D39E
0     CO      1     0     0     0     1     1
1     AD      0     2     1     0     0     0
2     OT      0     0     0     1     0     1

其中,突变是列名,其值(命中数)对应于状态。

7gcisfzg

7gcisfzg1#

这应该可以达到目的:

df.groupby(['Status', 'Mutation']).size().unstack(fill_value=0)
wkftcu5l

wkftcu5l2#

我们可以像下面这样使用pd.crosstab

>>> pd.crosstab(df["Status"], df["Mutation"])

Mutation  D39E  D87N  H157Y  R47H  R62H  R67H
Status                                       
AD           1     0      0     2     0     1
CO           0     1      1     0     0     0
OT           1     0      0     0     1     0

或者我们可以使用pd.get_dummiespandas.DataFrame.groupbypandas.DataFrame.rename列,如下所示:

(pd.get_dummies(df, 
                columns=['Mutation']
               ).groupby(['Status']).sum().rename(columns=lambda x: x.split('_')[1]))

输出:

D39E  D87N  H157Y  R47H  R62H  R67H
Status                                     
AD         1     0      0     2     0     1
CO         0     1      1     0     0     0
OT         1     0      0     0     1     0

相关问题