首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和创建Pandas列的柱状图,缺少值

Python和创建Pandas列的柱状图,缺少值
EN

Stack Overflow用户
提问于 2018-09-16 12:05:09
回答 2查看 2.3K关注 0票数 0

具有以下数据框架:

代码语言:javascript
复制
   name  value  count  total_count
0     A      0      1           20
1     A      1      2           20
2     A      2      2           20
3     A      3      2           20
4     A      4      3           20
5     A      5      3           20
6     A      6      2           20
7     A      7      2           20
8     A      8      2           20
9     A      9      1           20
----------------------------------
10    B      0     10           75
11    B      5     30           75
12    B      6     20           75
13    B      8     10           75
14    B      9      5           75

我希望将数据枢轴,按名称值对每一行进行分组,然后根据聚合到回收箱中的value & count列创建列。

解释:我有10个可能的值,范围为0-9,并不是每个组中都有所有的值。在上面的示例组中,B缺少值1,2,3,4,7。我想创建一个有5个回收箱的直方图,忽略丢失的值,并计算每个回收站的计数百分比。结果会是这样的:

代码语言:javascript
复制
  name       0-1  2-3  4-5  6-7       8-9
0    A  0.150000  0.2  0.3  0.2  0.150000
1    B  0.133333  0.0  0.4  0.4  0.066667

例如,对于A组的bin 0-1,计算为0,1 (1+2)值的计数之和,除以Atotal_count

代码语言:javascript
复制
  name       0-1
0    A       (1+2)/20 = 0.15

我正在研究hist法这个StackOverflow问题,但仍然在努力找出正确的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-17 06:00:05

为了得到确切的结果,你可以试试这个。

代码语言:javascript
复制
bins=range(10)
res = df.groupby('name')['count'].sum()
intervals = pd.cut(df.value, bins=bins, include_lowest=True)
df1 = (df.groupby([intervals,"name"])['count'].sum()/res).unstack(0)

df1.columns = df1.columns.astype(str)  # convert the cols to string
df1.columns = ['a','b','c','d','e','f','g','h','i']  # rename the cols
cols = ['a',"b","d","f","h"]

df1 = df1.add(df1.iloc[:,1:].shift(-1, axis=1), fill_value=0)[cols]
print(df1)

稍后您可以手动重命名科尔。

代码语言:javascript
复制
# Output:
           a         b     d        f        h 
name                    
   A    0.150000    0.2   0.3   0.200000    0.15
   B    0.133333    NaN   0.4   0.266667    0.20

可以使用NaN替换df1.fillna("0.0")值。

票数 1
EN

Stack Overflow用户

发布于 2018-09-16 12:35:46

使用pd.cut对您的特性进行装箱,然后使用df.groupby().count().unstack()方法获取您要查找的数据。在分组期间,您可以使用任何聚合函数(.sum()、.count()等)来获得您想要的结果。如果您正在寻找一个示例,下面的代码可以工作。

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.DataFrame(
    data ={'name': ['Group A','Group B']*5,
           'number': np.arange(0,10), 
           'value': np.arange(30,40)})
df['number_bin'] = pd.cut(df['number'], bins=np.arange(0,10))
# Option 1: Sums
df.groupby(['number_bin','name'])['value'].sum().unstack(0)
# Options 2: Counts
df.groupby(['number_bin','name'])['value'].count().unstack(0)

原始数据中的空值不会影响结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52353954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档