python - 按间隔中的位置对组进行计数

标签 python pandas

我对如何在 Python Pandas 中获得简单的解决方案有点迷失

我有一个包含 3 列的数据框:

A  B  val
P1 P2 12
P1 P2 14
P2 P2 18
P2 P1 17
P1 P3 15
P1 P3 16
P1 P3 13

我想按 A 和 B 分组进行计数,具体间隔值,在另一个数据帧中手动定义:

MIN MAX
12  12
13  15
16  17

结果应该是间隔和休息的计数,如下所示:

A  B  V_12_12 V_13_15 V_16_17 V_OTHERS
P1 P2 1       1       0       0        
P2 P2 0       0       0       1
P2 P1 0       0       1       0       
P1 P3 0       2       1       0

我想动态获得结果,如果我更改间隔、删除或添加其他间隔,它应该更改最终数据帧中的列名称或编号。

感谢您的帮助。

最佳答案

使用pd.cut尝试类似的操作:

df = pd.read_clipboard()
df2 = pd.read_clipboard()

df['labels']=pd.cut(df['val'], 
                    bins=[0]+df2['MAX'].tolist()+[np.inf], 
                    labels = [f'V_{s}_{e}' for s, e in zip(df2['MIN'], df2['MAX'])]+['V_OTHERS'])

df.groupby(['A','B','labels'])['labels'].count().unstack().reset_index()

输出:

labels   A   B  V_12_12  V_13_15  V_16_17  V_OTHERS
0       P1  P1        0        0        0         0
1       P1  P2        1        1        0         0
2       P1  P3        0        2        1         0
3       P2  P1        0        0        1         0
4       P2  P2        0        0        0         1
5       P2  P3        0        0        0         0

关于python - 按间隔中的位置对组进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75088536/

相关文章:

python - 使用 Python pandas 格式化数据框

python - Bokeh 图中图例中的逐字标签

python - 使用 PySNMP 作为自有/供应商 MIB 的陷阱接收器

python - 替代 Pandas DataFrame 中的嵌套 np.where

python - 获取调用该函数的文件的绝对路径

python - 如何对 pandas 数据框应用两个样本比例测试?

python - 控制 Flask 应用程序中的 URL 顺序

python - Pybind11:在C++函数中返回大型数组会显着增加python中的计算时间

python - 使用Python的组合方法

python - 如何在不删除所有数据的情况下将列表转换为数据框?