熊猫value_counts(显示值和比率)

时间:2020-10-12 23:49:25

标签: python pandas dataframe

作为熊猫的新手,我希望从特定列中获取值计数,并将百分比计数合并到一个框架中。我可以得到一个,但不能弄清楚如何将它们添加或合并到一个框架中。有想法吗?

框架/表格应如下所示:

some_value, count, count(as %)

这就是我所拥有的...

import numpy as np
import pandas as pd 

np.random.seed(1)
values = np.random.randint(30, 35, 20)

df1 = pd.DataFrame(values, columns=['some_value'])
df1.sort_values(by=['some_value'], inplace = True)
df2 = df1.value_counts()
df3 = df1.value_counts(normalize=True)

print(df2)
print("------")
print(df3) 

4 个答案:

答案 0 :(得分:2)

只需使用

pd.DataFrame({"count":df2,"%":df3*100})

将该系列放入一个df。

输出:

            count     %
some_value             
34              7  35.0
32              4  20.0
33              3  15.0
31              3  15.0
30              3  15.0

答案 1 :(得分:0)

我猜想调用value_counts,然后使用lambda函数对其进行标准化可能会更有效,但是您可以通过执行以下操作获得所需的结果:

df1_counts = df1.value_counts().to_frame(name="count").merge(
    df1.value_counts(normalize=True).to_frame(name="count(as %)"),
    left_index=True,
    right_index=True,
)

产生:

| some_value | count | count(as %) |
|------------|-------|-------------|
| 34         | 7     | 0.35        |
| 32         | 4     | 0.20        |
| 33         | 3     | 0.15        |
| 31         | 3     | 0.15        |
| 30         | 3     | 0.15        |

最好!

答案 2 :(得分:0)

计算,重命名和加入。让我们尝试;

df1.some_value.value_counts().to_frame('count').join(df1.some_value.value_counts(normalize=True).to_frame('%'))



  count   %
34      7  0.35
32      4  0.20
33      3  0.15
31      3  0.15
30      3  0.15

答案 3 :(得分:0)

使用partial中的functools中的pd.DataFrame.agg来调用函数列表:

from functools import partial
vc_norm = partial(pd.Series.value_counts, normalize=True)
df1['some_value'].agg([pd.Series.value_counts, vc_norm])

输出:

    value_counts  value_counts
34             7          0.35
32             4          0.20
31             3          0.15
30             3          0.15
33             3          0.15

或者您可以像这样使用lambda函数:

df1['some_value'].agg([pd.Series.value_counts, lambda x: x.value_counts(normalize=True)])