【发布时间】:2020-10-14 09:48:13
【问题描述】:
有一个看起来像这样的 pandas df:
x column word size y
0 1552 0 word1 218 2
1 1775 1 word2 53 2
2 1999 2 word3 163 2
3 2200 3 word4 142 2
4 2345 4 word5 129 2
我想根据条件对行进行分组:
abs(current_row_x + current_row_size - next_row_x) < 10
因此,此处所需的 df 将是:
x column word size y
0 1552 0 word1 word2 271 2
1 1999 2 word3 163 2
3 2200 3 word4 word5 271 2
我现在尝试的如下:
df = df.groupby((abs(df.x + df.size - df.x.shift(1)) < 10).cumsum()).agg({'y':'min', 'x':'min', 'size':'sum', 'column':'min', 'word':' '.join})
但结果 df 并不完全符合我的预期,而且 groupby 条件似乎也被忽略了。
有什么可能的方法吗?谢谢
【问题讨论】:
-
您确定此条件设置正确吗?我的输出不匹配。
-
基于
abs(current_row_x + current_row_size - next_row_x) < 10的组是我想要完成的。 x 是单词开始的位置,size 是单词大小。因此,如果 x + size 足够接近下一个单词(下一个 df 行中的 x ),我想对它们进行分组。也许df = df.groupby((abs(df.x + df.size - df.x.shift(1)) < 10).cumsum()).agg({'y':'min', 'x':'min', 'size':'sum', 'column':'min', 'word':' '.join})方法是完全错误的。我尝试了不同的方法,但没有运气。目标是获得所需的 df。
标签: python-3.x pandas dataframe pandas-groupby