假设我有以下数据帧:
d = {'col1':['a','b','c','a','a','b','c','c','c','c'],'col2':[0,1,1,0,1,1,1,1,0,1]}
df = pd.DataFrame(d)
对于col1
中的每个不同值,我想计算百分比、计数和长度,我制作了一个新的数据帧,并进行了我提到的操作:
df1 = df[df['col1'].isin(["c"])]
查找c
:的0/1百分比
df1['col2'].value_counts(normalize=True)*100
查找c
:的计数0/1
df1['col2'].value_counts()
以及c
:的长度
len(df1)
我想知道如何对所有不同的值a
、b
和c
迭代执行此操作,并制作一个新的数据帧来显示所有结果,而不是像在df1
中那样每次都制作新的数据框?我知道我现在所做的并不是解决这个问题的最佳方式。
分组方式:
grouped = df.groupby(['col1'])['col2']
# percentage
grouped.value_counts(normalize=True)
# counts
grouped.value_counts()
# total count
grouped.size()
试用crosstab
out = pd.crosstab(df['col1'], df['col2'], normalize='index')*100
Out[89]:
col2 0 1
col1
a 66.666667 33.333333
b 0.000000 100.000000
c 20.000000 80.000000