[英]Pandas: value_counts into a data frame
我有下表:
a b c d e
1 0 1 0 0
0 1 0 1 1
0 0 0 1 1
1 0 0 1 1
0 0 0 1 1
我需要转换此表,以便对于每一列,我得到 0 和 1 的计数。 我需要下表:
fields count_1 count_0
------------------------------
a 2 3
b 1 4
c 1 4
d 4 1
e 4 1
我知道如果我使用 value_counts(),我会为我返回每个值的计数。 但是,我真的不知道如何创建这个表。 能否请你帮忙?
让我们使用sum
和pd.concat
:
pd.concat([(df==0).sum().rename('count_0'), df.sum().rename('count_1')], axis=1)
Output:
count_0 count_1
a 3 2
b 4 1
c 4 1
d 1 4
e 1 4
%timeit df.apply(pd.Series.value_counts).transpose().add_prefix('count_')
每个循环 6.4 毫秒 ± 278 微秒(平均值 ± 标准偏差。7 次运行,每次 100 次循环)
%timeit df.stack().groupby(level=[1]).value_counts().unstack().add_prefix('count_')
每个循环 2.78 毫秒 ± 69.5 微秒(平均值 ± 标准偏差。7 次运行,每次 100 次循环)
%%timeit
df_out = pd.DataFrame([
[x.strip() for x in df.columns], sum(df.values == 1), sum(df.values == 0)
]).T
df_out.columns = ['fields', 'count_1', 'count_0']
每个循环 1.15 毫秒 ± 27.4 微秒(平均值 ± 标准偏差。7 次运行,每次 1000 次循环)
%timeit pd.concat([(df==0).sum().rename('count_0'), df.sum().rename('count_1')], axis=1)
每个循环 1.09 毫秒 ± 9.69 微秒(平均值 ± 标准偏差。7 次运行,每次 1000 次循环)
让我们尝试按列应用value_counts
:
df.apply(pd.Series.value_counts).transpose().add_prefix('count_')
count_0 count_1
a 3 2
b 4 1
c 4 1
d 1 4
e 1 4
或者,类似地使用stack
和unstack
:
df.stack().groupby(level=[1]).value_counts().unstack().add_prefix('count_')
count_0 count_1
a 3 2
b 4 1
c 4 1
d 1 4
e 1 4
尝试这个,
import pandas as pd
df = pd.DataFrame([
[x.strip() for x in df.columns], sum(df.values == 1), sum(df.values == 0)
]).T
df.columns = ['fields', 'count_1', 'count_0']
fields count_1 count_0
0 a 2 3
1 b 1 4
2 c 1 4
3 d 4 1
4 e 4 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.