我目前使用以下函数来检查包含二进制数据的列中的数据分布(示例https://pastebin.com/QpWfREYB)。
print(pd.value_counts(df['binary']).apply(lambda x: x/len(data['label'])*100))
print(pd.value_counts(df['binary']).apply(lambda x: x))
输出:
A 65.466667
B 34.533333
Name: label, dtype: float64
A 7856
B 4144
Name: label, dtype: int64
是否有一种简单的方法可以获得如下输出:
A 7856 (65.67%)
B 4144 (65.67%)
Sum 12000 (100.00%)
答案 0 :(得分:2)
我认为您需要两个系列中的concat
,添加新行并最后添加()
到最后一列:
df = pd.read_csv('https://pastebin.com/raw/QpWfREYB', sep='\s+')
print (df.head())
binary
0 A
1 A
2 A
3 A
4 A
a = pd.value_counts(df['binary'])
b = a.div(len(df)).mul(100).round(2)
#same as
#b = pd.value_counts(df['binary'], normalize=True).mul(100).round(2)
df = pd.concat([a,b], axis=1, keys=('x','y'))
df.loc['Sum'] = df.sum()
df['y'] = '(' + df['y'].astype(str) + '%)'
print (df)
x y
A 7856.0 (65.47%)
C 4144.0 (34.53%)
Sum 12000.0 (100.0%)