数据分布 python

Distribution of data with python

假设我有这样的数据:

Length    Width    Height 
100        140       100
120        150       110
140        160       120
160        170       130 
170        190       140
200        200       150
210        210       160
220        220       170

现在,我想知道每个列的数据以一定的增量分布 例如: 如果我想查看 Length 列中的数据分布,从 100 到 160,增量为 30,并且我想查看类似

的输出
Min   Max    count  Percentage  Remaining values(out the range which we have given)
100   130     1       12.5         7
130   160     2       25           5 

以及如何从中绘制条形图? 请帮忙

您可以使用 pd.cut 来实现您的目标:

out = df.groupby(pd.cut(df['Length'], np.arange(100, 160+1, 30)))['Length'] \
        .agg(**{'Min': 'min', 'Max': 'max', 'Count': 'count',
                'Percentage': lambda x: 100 * x.size / len(df),
                'Remaining': lambda x: len(df) - x.size})
print(out)

# Output
            Min  Max  Count  Percentage  Remaining
Length                                            
(100, 130]  120  120      1        12.5          7
(130, 160]  140  160      2        25.0          6

IIUC,你可以使用 pandas.cut:

(df.groupby(pd.cut(df['Length'], bins=[100,130,160]))
   ['Length'].agg(count='count')
   .assign(**{'Remaining value': lambda d: len(df)-d['count'],
              'Percentage': lambda d: d['count']/len(df)*100,
             })
)

输出:

            count  Remaining value  Percentage
Length                                        
(100, 130]      1                7        12.5
(130, 160]      2                6        25.0

对于绘图,您可以使用许多库自动完成。

seaborn 示例:

import seaborn as sns
sns.histplot(df, bins=[100,130,160,190,220])

输出:

sns.displot(df.melt(), x='value', col='variable',
            kind='hist', bins=[100,130,160,190,220])

输出: