如何使用python通过分割数据框架来创建一个组[英] How to create a group by spliting the dataframe using python

本文是小编为大家收集整理的关于如何使用python通过分割数据框架来创建一个组的处理方法,想解了如何使用python通过分割数据框架来创建一个组的问题怎么解决?如何使用python通过分割数据框架来创建一个组问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我的数据框:

 df:
 order             quantity
  A                   1
  B                   1
  C                   2
  D                   3
  E                   3
  F                   4

我的目标是根据 Quantity 值从此数据框创建一个组.我想要的结果.

 df:
group        order             quantity
  1             A                   1
                B                   1
                C                   2
  2             D                   3
                E                   1
  3             E                   2
                F                   2
  4             F                   2

所以这里我想要的结果是基于数量的.数量的最大值为 4.在 group1、group2 &group3 中,总值(A+B+C=4)(即保持数量的最大值为 4).在 group4 中,我们可以看到没有要添加的值,因此该组由剩下的组成(这里是 2).在group2&group3中可以看到E和F的值是分开的.

所以以后我可以按名称或编号选择组.

注意:我的实际订单(column["order"]) 看起来像这样 "PMC11-AA1L1PAVWJJ+Z1" 它是一个字符串.

这在 python 中是否可行.如果是这样,请给我建议方法.我可以练习和学习.

推荐答案

您的数据:

df = pd.DataFrame({'order':['A', 'B', 'C', 'D', 'E', 'F'],'quantity':[1,1,2,3,3,4]})

解决方案:

df = pd.DataFrame(np.concatenate(df.apply(lambda x: [x[0]] * x[1], 1).as_matrix()), 
                  columns=['order'])
df['quantity'] = 1
df['group'] = sorted(range(0, len(df)/3, 1) * 4)[0:len(df)]

输出:

   order  quantity  group
0      A         1      0
1      B         1      0
2      C         1      0
3      C         1      0
4      D         1      1
5      D         1      1
6      D         1      1
7      E         1      1
8      E         1      2
9      E         1      2
10     F         1      2
11     F         1      2
12     F         1      3
13     F         1      3

然后 groupby 和 sum.

df.groupby(['group', 'order']).sum()

输出:

             quantity
group order          
0     A             1
      B             1
      C             2
1     D             3
      E             1
2     E             2
      F             2
3     F             2

如果你愿意,之后可以使用 reset_index().

我希望它有所帮助.

我应该解释解决方案吗?对你有用吗?

本文地址:https://www.itbaoku.cn/post/1727821.html