Python 修改描述函数以删除和添加列
我有一个3列的数据框。每列包含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'],
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'],
'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']
将删除“否”部分中唯一的。对“是”也要这样做