修改describe函数以删除和添加列

2024-04-19 07:51:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个3列的数据框。每列包含yesno或{}。 我试图根据列a查找每列的频率。我可以用describe()来做这个。在

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

我在选择想要的describe列时遇到问题。下面是一个我希望它看起来的例子。freq/total_count列是该行的总计freq上的freq。例如,b&;no2/6。在

^{pr2}$

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


Tags: 数据noimportpandastopascountnp
1条回答
网友
1楼 · 发布于 2024-04-19 07:51:26

你在正确的轨道上。df2.groupby('a').describe().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)

输出是

^{pr2}$

为了更好地打印这个,我们需要删除“unique”列标题。然后把“否”部分和“是”部分放在一起。在

del data['no','unique']
del data['yes','unique']
pd.concat([data['no'],data['yes']],axis=1,keys=['no','yes'])

给出最终输出:

^{4}$

相关问题 更多 >