Python 修改描述函数以删除和添加列

Python 修改描述函数以删除和添加列,python,pandas,Python,Pandas,我有一个3列的数据框。每列包含yes、no或nan。 我试图根据columna查找每列的频率。我可以用descripe()来实现这一点 import pandas as pd, numpy as np df2 = pd.DataFrame({'a':['yes','yes','no','yes','no','yes'], 'b':['no','yes','no','yes','no','no'],

我有一个3列的数据框。每列包含
yes
no
nan
。 我试图根据column
a
查找每列的频率。我可以用
descripe()
来实现这一点

import pandas as pd, numpy as np

df2 = pd.DataFrame({'a':['yes','yes','no','yes','no','yes'],
                        'b':['no','yes','no','yes','no','no'],
                        'c':['yes','yes','yes','no','no', np.nan]})

df2.groupby('a').describe().transpose()

a    no                   yes                 
  count unique top freq count unique  top freq
b     2      1  no    2     4      2   no    2
c     2      2  no    1     3      2  yes    2
我在选择所需的
description
列时遇到问题。下面是我希望它看起来如何的一个例子。
freq/total\u count
列是该行的
freq
总计
freq
。例如,
b
no
2/6

a    no                                      yes                
  count top freq freq/total_count   count top freq freq/total_count
b     2  no    2     33%             4    no    2     33% 
c     2  no    1     20%             3   yes    2     40%

如果需要更多信息,请告诉我。

您的思路是正确的。
df2.groupby('a').descripe().transpose()
命令提供了一个带有多索引的数据帧。要选择/操作数据帧的各个部分,必须首先选择“是”或“否”索引,然后选择列索引

import pandas as pd, numpy as np

df2 = pd.DataFrame({'a':['yes','yes','no','yes','no','yes'],
                    'b':['no','yes','no','yes','no','no'],
                    'c':['yes','yes','yes','no','no', np.nan]})

data = df2.groupby('a').describe().transpose()

data['no','freq/total_count']=np.nan
data['yes','freq/total_count']=np.nan

for ind in data.index:
    data['no','freq/total_count'][ind] = data['no']['freq'][ind]/(data['no']['count'][ind]+data['yes']['count'][ind])*100
    data['yes','freq/total_count'][ind] = data['yes']['freq'][ind]/(data['no']['count'][ind]+data['yes']['count'][ind])*100


data['no','freq/total_count'] = data['no','freq/total_count'].map('{0:.0f}%'.format)
data['yes','freq/total_count'] = data['yes','freq/total_count'].map('{0:.0f}%'.format)
输出是

a   no                          yes                           no                 yes
    count  unique  top   freq   count   unique   top   freq   freq/total_count   freq/total_count
b   2      1       no    2      4       2        no    2      33%                33%
c   2      2       no    1      3       2        yes   2      20%                40%
要将其打印出来,我们需要删除“unique”列标题。然后将“否”部分和“是”部分放在一起

del data['no','unique']
del data['yes','unique']
pd.concat([data['no'],data['yes']],axis=1,keys=['no','yes'])
给出最终输出:

a   no                                     yes
    count  top   freq   freq/total_count   count   top   freq   freq/total_count
b   2      no    2      33%                4       no    2      33%
c   2      no    1      20%                3       yes   2      40%

抱歉,为什么预期值不是50%50%、0.333%0.666%?由于第一行的总数是
2+2=4
,最后一行是
1+2=3
,我想把它重复一遍
2+4=6
2+3=5
,因为我想对观察的总数重复一遍谢谢,但是如何去掉所有列的
unique
?命令
del data['no',unique']
将删除“否”部分中唯一的
。对“是”也要这样做