python - Pandas Dataframe:多维分箱
问题描述
假设我有一个数据框 df,它由一个由两个对象组成的类S
、一组与它们相关联的坐标X
和Y
以及一个V
在那里测量的值 。
例如,数据框如下所示:
S X Y V
0 3 3 1
0 4 3 2
1 6 0 1
1 3 3 8
我想知道允许我在新的分箱中对与类关联的坐标X
和坐标进行分组的命令。在这张新图片中, 的新值应该是每个类别的 bin 中的值的总和,。Y
S
V
S
例如,假设这个坐标系最初分别在 0 和 10 之间分X
箱Y
。我想将它放在 0 和 2 之间。这意味着:
- 来自
0 < X <= 5
,0 < Y <= 5
在旧分箱中的值构成值 0; - 来自
6 < x <= 10
,6 < y <= 10
在旧分箱中的值构成值 1;
编辑:
再举个例子,考虑 Dataframe df
:
- 第 1 行有
X = 3
和Y = 3
。由于0 < X <= 5
and0 < Y <= 5
,这属于 bin(0,0)
- 第 2 行有
X = 4
和Y = 3
。由于0 < X <= 5
and0 < Y <= 5
,这也落入了 bin(0,0)
。 由于第 1 行和第 2 行是在同一个 bin 中观察到的并且属于同一类
S
,因此它们沿 column 添加V
。这给出了一个组合行,X=0, Y=0, V = 1+2 =3
第 3 行有
X = 6
和Y = 0
。由于6 < X <= 10
and0 < Y <= 5
,这属于 bin(1,0)
第 4 行有
X= 3
和Y = 3
。由于0 < X <= 5
and0 < Y <= 5
,这属于 bin(0,0)
。但是,由于元素属于 classS=1
,它没有添加到任何东西,因为我们只是在共享类之间添加。
输出应该是:
S X Y V
0 0 0 3
0 1 0 1
1 0 0 8
我必须使用什么命令来实现这一点?
解决方案
这应该可以解决问题:
data.loc[data['X'] <= 5, 'X'] = 0
data.loc[data['X'] > 5, 'X'] = 1
data.loc[data['Y'] <= 5, 'Y'] = 0
data.loc[data['Y'] > 5, 'Y'] = 1
data = data.groupby(['S', 'X', 'Y']).sum().reset_index()
对于您的示例,输出为:
S X Y V
0 0 0 0 3
1 1 0 0 8
2 1 1 0 1
我发现这个答案很有帮助。
推荐阅读
- r - ggplot2 facet grid 有条件的 facet 和整洁的评估
- ios - 无法使用 Facebook 4.37.0 从 iOS 打开 Messenger
- c++ - 如何在调试器中进行代码路径分析?
- java - 如何在一个类中构建一个 HashMap,然后在 Java 中的另一个类中使用它?
- postman - 无法向 Vimeo API 发送 PATCH 请求
- python - 我可以通过对具有多处理的数据对象中的项目应用函数来提高性能吗?
- astronomy - IRAF imalign 不会移动图像,错误地报告输入和输出图像的数量不相等,为什么?
- python - 如何访问用for循环制作的python列表(从文件中读取数据)
- json - 用scala编程语言将jsonObject转换为Map
- python - 弹性搜索和 AWS python