Библиотека Python Pandas получает столбец с удалением и объединяет дубликаты [дубликаты]

Я знаю, что это немного старая проблема, но самое простое решение в ES2015 / ES6, которое я мог придумать, было на самом деле довольно простым, используя Object.assign (),

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

/**
 * Simple object check.
 * @param item
 * @returns {boolean}
 */
export function isObject(item) {
  return (item && typeof item === 'object' && !Array.isArray(item));
}

/**
 * Deep merge two objects.
 * @param target
 * @param ...sources
 */
export function mergeDeep(target, ...sources) {
  if (!sources.length) return target;
  const source = sources.shift();

  if (isObject(target) && isObject(source)) {
    for (const key in source) {
      if (isObject(source[key])) {
        if (!target[key]) Object.assign(target, { [key]: {} });
        mergeDeep(target[key], source[key]);
      } else {
        Object.assign(target, { [key]: source[key] });
      }
    }
  }

  return mergeDeep(target, ...sources);
}

Пример использования:

mergeDeep(this, { a: { b: { c: 123 } } });
// or
const merged = mergeDeep({a: 1}, { b : { c: { d: { e: 12345}}}});  
console.dir(merged); // { a: 1, b: { c: { d: [Object] } } }

Вы найдете неизменную версию этого в ответе ниже.

Обратите внимание, что это приведет к бесконечной рекурсии по циклическим ссылкам. Здесь есть несколько отличных ответов о том, как обнаружить циркулярные ссылки, если вы считаете, что столкнулись с этой проблемой.

59
задан 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 19 August 2018 в 02:19
поделиться
  • 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 19 August 2018 в 02:19
поделиться

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

Функцию 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 19 August 2018 в 02:19
поделиться

Если вы хотите сохранить исходные столбцы 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 19 August 2018 в 02:19
поделиться
df.groupby(['Fruit','Name'])['Number'].sum()

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

6
ответ дан jared 19 August 2018 в 02:19
поделиться

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

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

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

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

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

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

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

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

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

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