获取存储在一个数据帧大熊猫列中的值的基础上,一个范围的频率计数,并通过分类变量分离

问题描述 投票:0回答:1

我有一个数据帧,看起来像这样:

df = pd.DataFrame([[0.012343, 'A'], [0.135528, 'A'], [0.198878, 'A'], [0.199999, 'B'], [0.181121, 'B'], [0.199999, 'B']])

df.columns = ['effect', 'category']

     effect          category
0    0.012343        A
1    0.135528        A
2    0.198878        A
3    0.199999        B
4    0.181121        B
5    0.199999        B

我的目标是让每个类别的频率分布的代表。在这种情况下,块大小是0.05。所得到的数据帧将如下所示:

 my_distribution = pd.DataFrame([['A', 1, 0, 1, 1], ['B', 0, 0, 0, 3]])

 my_distributions.columns = ['category', '0.0-0.05', '0.05-0.10', 0.1-0.15', '0.15-0.20']

        category  0.0-0.05  0.05-0.10  0.1-0.15  0.15-0.20
0        A         1          0         1          1
1        B         0          0         0          3

____________________________________________________________

因此,在短暂的什么,我试图做的是创造箱和计数出现在每个仓的数量,按类别分开。任何帮助将非常感激。

python pandas
1个回答
0
投票

您可以使用cut其次crosstab + reindex

import pandas as pd

df = pd.DataFrame([[0.01, 'A'], [0.13, 'A'], [0.19, 'A'], [0.19, 'B'], [0.18, 'B'], [0.19, 'B']])
df.columns = ['effect', 'category']

labels = ['0.0-0.05', '0.05-0.10', '0.1-0.15', '0.15-0.20']
cuts = df.assign(quant=pd.cut(df.effect, bins=[0.0, 0.05, 0.10, 0.15, 0.20], labels=labels))

# get counts per bin
result = pd.crosstab(cuts.category, columns=cuts.quant)

# reindex with labels to account for bin with 0 counts
result = result.reindex(labels, axis=1).fillna(0).astype(int)

# reset index and rename axis for display purposes
result = result.reset_index().rename_axis(None, axis=1)

print(result)

产量

  category  0.0-0.05  0.05-0.10  0.1-0.15  0.15-0.20
0        A         1          0         1          1
1        B         0          0         0          3
© www.soinside.com 2019 - 2024. All rights reserved.