Как создать группу, разделив фрейм данных с помощью Python - PullRequest
0 голосов
/ 24 сентября 2018

Мой фрейм данных:

 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. В group1, group2 и group3 суммарные значения (A + B + C = 4) (т.е. при сохранении максимального значения количества как 4).В group4 мы можем видеть, что никакие значения не добавляются, поэтому группа формируется слева (здесь это 2).В group2 & group3 вы можете увидеть, что значения E и F. разделены.

Так что в будущем я могу выбрать группу по ее имени или номеру.

Примечание: мой фактическийorder (column["order"]) выглядит так "PMC11-AA1L1PAVWJJ+Z1" это строка.

Возможно ли это в python.Если так, пожалуйста, предложите мне метод.Я мог бы практиковаться и учиться.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

@ АннаИлюкович-Страковская решение - это круто.Я переписал это, используя чистые панды.

#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
0 голосов
/ 24 сентября 2018

Ваши данные:

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

Затем сгруппировать и суммировать.

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 (), если хотите.

Надеюсь, это поможет.

Должен ли я объяснить решение?Это у вас работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...