объединить повторяющиеся ячейки столбца - PullRequest
1 голос
/ 22 мая 2019

Мой текущий Excel выглядит следующим образом:

  ----------------
  |  Type |  Val |
  |--------------|
  |  A    |  1   |
  |--------------|     
  |  A    |  2   |     
  |--------------|
  |  B    |  3   |
  |--------------|     
  |  B    |  4   |     
  |--------------|     
  |  B    |  5   |
  |--------------|
  |  C    |  6   |

----------------

Это обязательный Excel:

  ----------------------
  |  Type |  Val | Sum |
  |--------------------|
  |  A    |  1   | 3   |
  |       |------|     |
  |       |  2   |     |
  |--------------------|
  |  B    |  3   | 12  |
  |       |------|     |
  |       |  4   |     |
  |       |------|     |
  |       |  5   |     |
  |--------------------|
  |  C    |  6   |  6  |
  ----------------------

Возможно ли в python использование панд или любого другого модуля?


Ответы [ 3 ]

4 голосов
/ 22 мая 2019

использование IIUC:

df['Sum']=df.groupby('Type').transform('sum')
df.loc[df[['Type','Sum']].duplicated(),['Type','Sum']]=''
print(df)

   Type     Val Sum
0    A        1   3
1             2    
2    B        3  12
3             4    
4             5    
5    C        6   6

P.s: вы также можете добавить это как индекс:

df=df.set_index(['Type','Sum']) #export to excel without index=False

enter image description here

2 голосов
/ 22 мая 2019

Для объединенных первых 2 уровней возможно установить все 3 столбца на MultiIndex - отличается только порядок столбцов:

#specify column name after groupby
df['Sum'] = df.groupby('Type')['Val'].transform('sum')

df = df.set_index(['Type','Sum', 'Val'])
df.to_excel('file.xlsx')

Но, на мой взгляд, лучше всего работать с дублированными значениями:

df['Sum'] = df.groupby('Type')['Val'].transform('sum')
print (df)

  Type  Val  Sum
0    A    1    3
1    A    2    3
2    B    3   12
3    B    4   12
4    B    5   12
5    C    6    6

df.to_excel('file.xlsx', index=False)
1 голос
/ 22 мая 2019

Вы можете использовать

import pandas as pd

df = pd.DataFrame({'Type': ['A', 'A','B','B','B','C'], 'Val': [1,2 ,3,4,5,6]})

df_result = df.merge(df.groupby(by='Type', as_index=False).agg({'Val':'sum'}).rename(columns={'Val':'Sum'}), on = 'Type')

, который дает вывод как

print(df_result)
  Type  Val  Sum
0    A    1    3
1    A    2    3
2    B    3   12
3    B    4   12
4    B    5   12
5    C    6    6

Это то, что вы ищете?

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