首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据大熊猫群的长度划分和改变大熊猫群的值

根据大熊猫群的长度划分和改变大熊猫群的值
EN

Stack Overflow用户
提问于 2019-03-25 22:40:51
回答 1查看 581关注 0票数 1

我有一个熊猫DataFrame对象,它有一个名为'order_id‘的列。具有相同id的行属于同一个顺序(大小可以是1到1000之间的任何值),例如:

代码语言:javascript
运行
复制
sales_orders = {
    'order_id': [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4],
    # multiple other fields 
}
df = pd.DataFrame(sales_orders)

我需要根据例如3这样的截断值将组分割成较小的块。理想情况下,除了列的后缀之外,没有其他任何更改,即:

代码语言:javascript
运行
复制
'order_id': [1-0, 1-0, 1-0, 1-1, 1-1, 1-1, 1-2, 2, 2, 2, 3-0, 3-0, 3-0, 3-1, 3-1, 3-1, 3-2, 3-2, 3-2, 4]

我假设您可以简单地遍历组并在如下的for循环中单独地触摸每个组:

代码语言:javascript
运行
复制
for order_id, group in df.groupby(by=['order_id']):
    if group.shape[0] > 2:
        # change column line by line

但这看上去令人难以置信的不熊猫和可怕的缓慢。因此,我希望有一个明智、有表现力和可读性的解决方案;) )预先感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-25 22:45:05

使用groupbycumcount获取后缀,然后使用np.where有条件地设置它们。

代码语言:javascript
运行
复制
c = df.groupby('order_id').cumcount() // 3
m = (c == 0).groupby(df.order_id).transform('all')

df['order_id2'] = (
    np.where(m, df.order_id, df.order_id.astype(str) + '-' + c.astype(str))
      .astype(str))

df.head(10)

   order_id order_id2
0         1       1-0
1         1       1-0
2         1       1-0
3         1       1-1
4         1       1-1
5         1       1-1
6         1       1-2
7         2         2
8         2         2
9         2         2

如果2和4也有后缀,那么一个稍微简单一些的解决方案;您可以使用groupbycumcount来生成后缀,然后使用str.cat连接它们。

代码语言:javascript
运行
复制
c = (df.groupby('order_id').cumcount() // 3).astype(str)
df['order_id3'] = df['order_id'].astype(str).str.cat(c, sep='-')

df.head(10)

   order_id order_id2 order_id3
0         1       1-0       1-0
1         1       1-0       1-0
2         1       1-0       1-0
3         1       1-1       1-1
4         1       1-1       1-1
5         1       1-1       1-1
6         1       1-2       1-2
7         2         2       2-0
8         2         2       2-0
9         2         2       2-0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55347417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档