如何使用python拆分数据帧来创建组

2024-09-27 07:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧:

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

我的目标是基于数量值从这个数据帧创建一个组。 我想要的结果。你知道吗

 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。 在group1group2&;group3中,总值(A+B+C=4)(即数量的最大值保持为4)。 在group4中,我们可以看到没有要添加的值,因此组由剩余的组成(这里是2)。 在group2&;group3中可以看到E和F的值被除。你知道吗

所以在将来我可以选择它的名字或号码组。你知道吗

注: 我的实际顺序(column["order"])看起来像这样"PMC11-AA1L1PAVWJJ+Z1" 它是一个字符串。你知道吗

这在python中是可能的。如果是的话,请告诉我方法。我可以练习和学习。你知道吗


Tags: 数据目标df数量grouporder名字quantity
2条回答

@AnnaIliukovich Strakovskaia解决方案很棒。我用纯熊猫重新写的。你知道吗

#Generate input dataframe from @AnnaIliukovich-Strakovskaia
df = pd.DataFrame({'order':['A', 'B', 'C', 'D', 'E', 'F'],'quantity':[1,1,2,3,3,4]})
#Expand dataframe 
df_out = df.order.repeat(df.quantity).reset_index(drop=True).to_frame()
#Create groupings of four records 
df_out['grp'] = df_out.index // 4
#Groupby 'grp' and count
df_out.groupby(['grp','order'])['order'].count().to_frame(name='quantity')

输出:

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

您的数据:

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\u index()。你知道吗

希望对你有帮助。你知道吗

我应该解释一下解决方法吗?对你有用吗?你知道吗

相关问题 更多 >

    热门问题