Объедините значение, используя python / pandas - PullRequest
0 голосов
/ 18 мая 2018

Я пользователь python / pandas и у меня есть вопрос по этому поводу.У меня есть файл Excel, как показано ниже.

   C1  C2  C3  C4     C5     C6  ID  Value
0  aa  ee  ii  mm  aaaaa   bbbb   1    100
1  bb  ff  jj  nn   cccc  ddddd   2     50
2  aa  ee  ii  mm   eeee   ffff   3     20
3  dd  hh  ll  pp   gggg   hhhh   4     10
4  aa  ee  ii  mm   abcd   efgh   5      5
5  bb  ff  jj  nn  aaaaa   bbbb   6      2

Код для воспроизведения -

df = pd.DataFrame({'Value': [100,50,20,10,5,2],
'ID': [1,2,3,4,5,6],
'C1': ['aa','bb','aa','dd','aa','bb'],
'C2': ['ee','ff','ee','hh','ee','ff'],
'C3': ['ii','jj','ii','ll','ii','jj'],
'C4': ['mm','nn','mm','pp','mm','nn'],
'C5': ['aaaaa','cccc','eeee','gggg','abcd','aaaaa'],
'C6': ['bbbb','ddddd','ffff','hhhh','efgh','bbbb']})

Некоторые строки являются дубликатами в столбце 1-4 (например, ID1, ID3и ID5 или ID2 и ID6 являются дубликатами).Есть ли способ объединить дубликаты строк?(Я сосредотачиваюсь на столбце 1-4, и меня не волнуют столбцы 5 и 6)

Я хочу объединить «Значение» дублирующихся строк и оставить последовательность верхнего столбца.Например, вот выходной файл, который я хочу создать.

    Value   ID  C1  C2  C3  C4  C5      C6
0   125     1   aa  ee  ii  mm  aaaaa   bbbb
1   52      2   bb  ff  jj  nn  cccc    ddddd
2   10      4   dd  hh  ll  pp  gggg    hhhh

Если бы вы могли высказать свое мнение, я был бы очень благодарен за это.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Может быть другой эффективный способ, один из которых может быть:

  • Создать new_df таким образом, чтобы он сохранял уникальные значения в Column1 с первыми вхождениями.

  • Затем в исходном df получить сумму после группировки по Column1 и обновления значения new_df

Вы можете попробовать, как показано ниже:

new_df = df.drop_duplicates(subset='Column1', keep='first').reset_index()
del new_df['index'] # remove extra index column after reset index
new_df['Value'] = df.groupby('Column1', as_index=False).sum()['Value']
print(new_df)

Результат:

   ID  Value Column1 Column2 Column3 Column4 Column5 Column6
0   1    125      aa      ee      ii      mm   aaaaa    bbbb
1   2     52      bb      ff      jj      nn    cccc   ddddd
2   4     10      dd      hh      ll      pp    gggg    hhhh

Обновление:

Проверка с фреймом данных после редактирования :

new_df = df.drop_duplicates(subset='C1', keep='first').reset_index()
del new_df['index']
new_df['Value'] = df.groupby('C1', as_index=False).sum()['Value']
print(new_df)

Результат:

   C1  C2  C3  C4     C5     C6  ID  Value
0  aa  ee  ii  mm  aaaaa   bbbb   1    125
1  bb  ff  jj  nn   cccc  ddddd   2     52
2  dd  hh  ll  pp   gggg   hhhh   4     10
0 голосов
/ 18 мая 2018

Вы можете использовать groupby.agg.Я предполагаю, что вы хотите сложить value и взять первое id для каждой группы, как в желаемом результате.Вот минимальный пример:

df = pd.DataFrame([[100, 1, 'a', 'b'], [20, 2, 'a', 'b'],
                   [15, 3, 'c', 'd'], [5, 4, 'a', 'b'],
                   [25, 5, 'c', 'd']], columns=['value', 'id', 'col1', 'col2'])

res = df.groupby(['col1', 'col2']).agg({'id': 'first', 'value': sum}).reset_index()

print(res)

  col1 col2  id  value
0    a    b   1    125
1    c    d   3     40
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...