python - 熊猫根据其他专栏“切”
问题描述
我想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
以便为每个扇区执行切割。这对于比较来自不同来源的变量非常有用。col2
sector
结果将是(它是虚构的,不要指望它是 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:我做这个问答是因为我遇到了这个问题并且自己找不到解决方案。随意回答您自己的解决方案或改进我的解决方案,感谢您的反馈。
解决方案
我认为可以缩短为
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)
推荐阅读
- javascript - 如何将纯 JavaScript 导入 React 应用程序
- android - 我们如何展示 Android Studio Vector Assets Android 版本 4.1
- python - Python 将 Json 行加载到 Pandas 数据框
- javascript - 如果将 JavaScript 放在 `````` 中,它是否总是在网页加载完成之前执行?
- node.js - [MissingUsernameError]:没有给出用户名 Mongoose
- python - 覆盖 AdminSite 使 admin.py 另一个应用程序不显示在 django admin
- c++ - Cannot print out decimal numbers upto 6 in a void function.the value are correct checked by debugging.the problem is with the output
- token - 星云认证注销
- java - 像导航抽屉一样切换片段(带后退箭头)
- c++ - C++ - 如何遍历数组的所有组合以进行暴力破解