【发布时间】:2021-07-29 06:20:19
【问题描述】:
我无法为以下问题想出一个好的解决方案。请分享您的想法。
我正在尝试将 X、Y 空间数据(存储桶的物理位置)映射到 pandas 中的类别 / groupby 对象。每个桶之间在物理上都有空间,因此相似桶的数据点很接近,独特的桶之间有更大的空间。桶在两个平面 X 和 Y 中物理隔开,并且在其中具有不同数量的点。为简单起见,下面仅显示 X:
df = pd.DataFrame([0,1,2,6,7,8,12,13,14],columns=['X'])
df['Xdiff'] = df['X'].diff() #Get Diff
X Xdiff
0 0 NaN
1 1 1.0
2 2 1.0
3 6 4.0
4 7 1.0
5 8 1.0
6 12 4.0
7 13 1.0
8 14 1.0
我想要一个 groupby 对象,它的第一组是数据索引位置 0-2,第二组是 3-5,第三组是 6-8。如下所示
grp1.index = [0,1,2]
grp2.index = [3,4,5]
grp2.index = [6,7,8]
我尝试过 cut 和 groupby,但没有成功:
new_bins = df[ (df['Xdiff'] > 1) ] #Get larger diff values
X Xdiff
3 6 4.0
6 12 4.0
bins = pd.cut( df['X'], new_bins['Xdiff'])
0 NaN
1 NaN
2 NaN
3 NaN
4 (6.0, 12.0]
5 (6.0, 12.0]
6 (6.0, 12.0]
7 NaN
8 NaN
Name: X, dtype: category
Categories (1, interval[float64]): [(6.0, 12.0]]
感谢您的帮助。谢谢!
更新: 我现在正在努力在 pandas 之外添加组,然后是 groupby:
groups = []
for d in df['Xdiff']:
if d < 4:
groups.append(i)
else:
i+=1
groups.append(i)
df['bin'] =groups
df.groupby('bin').count()
然后输出: 这行得通,但我相信熊猫一定有更好的方法。谢谢!
X Xdiff
bin
1 3 2
2 3 3
3 3 3
【问题讨论】:
-
你希望你的输出是什么样的?
-
我想要一个带有每个垃圾箱的 groupby 对象。
-
为了清楚起见,您实际上并不需要间隔,您只是想将连续的值组合在一起?
-
没错,将连续的区间组合在一起。抱歉,我也无法表达清楚;谢谢你!
标签: python pandas pandas-groupby