熊猫:将value_counts放入数据框

时间:2020-07-14 19:41:14

标签: python pandas dataframe

我有下表:

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(),我将为我返回每个值的计数。但是,我真的不知道如何创建该表。你能帮忙吗?

3 个答案:

答案 0 :(得分:2)

让我们使用sumpd.concat

pd.concat([(df==0).sum().rename('count_0'), df.sum().rename('count_1')], axis=1)

输出:

   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 ms±278 µs(平均±标准偏差,共运行7次,每个循环100个循环)

%timeit df.stack().groupby(level=[1]).value_counts().unstack().add_prefix('count_')

每个循环2.78 ms±69.5 µs(平均±标准偏差,共运行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 ms±27.4 µs(平均±标准偏差,共运行7次,每个循环1000次)

%timeit pd.concat([(df==0).sum().rename('count_0'), df.sum().rename('count_1')], axis=1)

每个循环1.09 ms±9.69 µs(平均±标准偏差,共运行7次,每个循环1000次)

答案 1 :(得分:1)

让我们尝试按列应用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

或者,类似地使用stackunstack

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

答案 2 :(得分:1)

尝试一下

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