我对如何在 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/