【发布时间】:2026-01-15 05:15:01
【问题描述】:
我有一个由子句创建的熊猫数据框:
df = pd.DataFrame({'A':[29,31,48,51,66,64,68], 'B':[1.2,1.7,1.1,0.9,1.3,1.2,1.5]})
它看起来像这样:
A B
0 29 1.2
1 31 1.7
2 48 1.1
3 51 0.9
4 66 1.3
5 64 1.2
6 68 1.5
我想按“A”分组,不是用精确值,而是用绝对值小于 5。所以我想要的是这样的:
A B GroupId
0 29 1.2 1
1 31 1.7 1
2 48 1.1 2
3 51 0.9 2
4 66 1.3 3
5 64 1.2 3
6 68 1.5 3
我该怎么办?
我发现group by a dataframe by values that are just less than a second off - pandas 很有帮助,所以我可以使用:
df['sum'] = [df.loc[(df['A'] - t).abs() < 5, 'B'].sum() for t in df['A']]
流动:
A B sum
0 29 1.2 2.9
1 31 1.7 2.9
2 48 1.1 2.0
3 51 0.9 2.0
4 66 1.3 4.0
5 64 1.2 4.0
6 68 1.5 4.0
然后我可以使用 'sum' 作为 ID 将此数据帧分成不同的组。 有没有更好的办法?
【问题讨论】:
标签: python pandas dataframe group-by