Объедините две последовательные строки в один, имеющий один и тот же уникальный ключ в python [duplicate]

Есть ли способ сделать это?

Если библиотеки npm можно использовать в качестве решения, object-merge-advanced от вас действительно позволяет объединить объекты глубоко и настроить / переопределить каждое действие слияния с помощью знакомой функции обратного вызова. Основная идея этого - не просто глубокое слияние - что происходит со значением, когда два ключа одинаковы ? Эта библиотека позаботится об этом - при столкновении двух клавиш object-merge-advanced весит типы, стремясь сохранить как можно больше данных после слияния:

Ключ первого входного аргумента помечен # 1, второй аргумент - # 2. В зависимости от каждого типа один выбирается для значения ключа результата. В диаграмме «объект» означает простой объект (не массив и т. Д.).

Когда ключи не сталкиваются, все они вводят результат.

] Из вашего фрагмента примера, если вы использовали object-merge-advanced для объединения фрагмента кода:

const mergeObj = require("object-merge-advanced");
const x = { a: { a: 1 } };
const y = { a: { b: 1 } };
const res = console.log(mergeObj(x, y));
// => res = {
//      a: {
//        a: 1,
//        b: 1
//      }
//    }

Этот алгоритм рекурсивно пересекает все ключи входных объектов, сравнивает и строит и возвращает новый объединенный результат.

57
задан smci 7 October 2016 в 22:06
поделиться

7 ответов

использовать метод sum ()

df.groupby(['Fruit','Name']).sum()

Out[31]: 
               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1
53
ответ дан Steven G 18 August 2018 в 13:12
поделиться
  • 1
    Как могут панды знать, что я хочу суммировать col с именем Number? – Kingname 23 October 2017 в 12:32
  • 2
    @Kingname это последний столбец слева, если вы выберете NAME и FRUIT. если вы добавите 2 столбца влево, он будет суммировать оба столбца – Steven G 23 October 2017 в 16:51
  • 3
    @StevenG столбец Date также оставлен ... – Daniyal Shahrokhian 20 May 2018 в 06:11
  • 4
    Я нахожу это решение немного хакерским по сравнению с другими – matanster 24 July 2018 в 17:20
  • 5

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

df.groupby(['Name', 'Fruit']).sum()

               Number
Name  Fruit          
Bob   Apples       16
      Grapes       35
      Oranges      67
Mike  Apples        9
      Oranges      57
Steve Apples       10
Tom   Grapes       87
      Oranges      15
Tony  Grapes       15
      Oranges       1
5
ответ дан Batsu 18 August 2018 в 13:12
поделиться

Оба других ответа выполняют то, что вы хотите.

Функцию pivot можно использовать для упорядочивания данных в таблице nice

df.groupby(['Fruit','Name'],as_index = False).sum().pivot('Fruit','Name').fillna(0)



Name    Bob     Mike    Steve   Tom    Tony
Fruit                   
Apples  16.0    9.0     10.0    0.0     0.0
Grapes  35.0    0.0     0.0     87.0    15.0
Oranges 67.0    57.0    0.0     15.0    1.0
12
ответ дан Demetri P 18 August 2018 в 13:12
поделиться

Если вы хотите сохранить исходные столбцы Fruit и Name, используйте reset_index(). В противном случае Fruit и Name станут частью индекса.

df.groupby(['Fruit','Name'])['Number'].sum().reset_index()

Fruit   Name       Number
Apples  Bob        16
Apples  Mike        9
Apples  Steve      10
Grapes  Bob        35
Grapes  Tom        87
Grapes  Tony       15
Oranges Bob        67
Oranges Mike       57
Oranges Tom        15
Oranges Tony        1

Как видно из других ответов:

df.groupby(['Fruit','Name'])['Number'].sum()

               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1
1
ответ дан Gazala Muhamed 18 August 2018 в 13:12
поделиться
df.groupby(['Fruit','Name'])['Number'].sum()

Вы можете выбрать разные столбцы для суммирования чисел.

6
ответ дан jared 18 August 2018 в 13:12
поделиться

Также вы можете использовать функцию agg,

df.groupby(['Name', 'Fruit'])['Number'].agg('sum')
20
ответ дан Saurabh 18 August 2018 в 13:12
поделиться

Этот ответ только для понимания того, как работают groupby и sum.

Я использую набор данных «Дождь в Индии с 1900 по 2015 год»

В моем наборе данных есть столбцы типа «подразделение» »и« годовой ».

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

Total = Data.groupby('SUBDIVISION')['ANNUAL'].sum()
print (Total)

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

0
ответ дан vaibhav pawar 18 August 2018 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: