首页 > 解决方案 > 熊猫根据其他专栏“切”

问题描述

我想pd.cut在我的 pandas 数据框的某些变量中使用(将连续变量转换为离散变量),但我希望该剪切依赖于其他列。想象一下,我想要 3 个垃圾箱。

例如:

+------+------+------+--------+
| col1 | col2 | col3 | sector |
+------+------+------+--------+
| 4.5  | 6    | 7    | a      |
+------+------+------+--------+
| 8    | 9    | 17   | a      |
+------+------+------+--------+
| 0    | 9    | 8    | b      |
+------+------+------+--------+
| 8    | 9    | 0    | b      |
+------+------+------+--------+
| 1    | 2    | 3.5  | b      |
+------+------+------+--------+

我只想根据 切割成3 个箱,col1以便为每个扇区执行切割。这对于比较来自不同来源的变量非常有用。col2sector

结果将是(它是虚构的,不要指望它是 100% 准确的):

+----------+----------+------+--------+
| col1_cut | col2_cut | col3 | sector |
+----------+----------+------+--------+
| 2        | 2        | 7    | a      |
+----------+----------+------+--------+
| 3        | 3        | 17   | a      |
+----------+----------+------+--------+
| 1        | 3        | 8    | b      |
+----------+----------+------+--------+
| 3        | 3        | 0    | b      |
+----------+----------+------+--------+
| 1        | 1        | 3.5  | b      |
+----------+----------+------+--------+

PS:我做这个问答是因为我遇到了这个问题并且自己找不到解决方案。随意回答您自己的解决方案或改进我的解决方案,感谢您的反馈。

标签: pythonpandas

解决方案


我认为可以缩短为

s=pd.concat([y[['col1','col2']].apply(pd.cut,bins=3,labels=False)for x, y in df.groupby('sector')])
s
Out[157]: 
   col1  col2
0     0     0
1     2     2
2     0     2
3     2     2
4     0     0

df.update(s)

推荐阅读