Суммируйте повторяющиеся строки определенных столбцов в кадре данных - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу добавить конкретные столбцы (C, D, E, F, G), основанные на дублирующих строках столбца B. При этом оставшиеся неповторяющиеся строки не изменились. Выходные данные столбца A должны быть первым индексом повторяющихся строк.

У меня есть следующий фрейм данных:

A     B     C  D  E  F  G
box1  0487  1     1     1
box2  0487     1     1
blue  0478  1  1        1
gray  0478  1  1  1  1
gray  0478        1  1  1
flat  8704  1  1        1
clay  8704        1     1
dark  8740  1  1  1  1  1
late  4087  1     1     1

Я хочу вывод следующим образом:

A     B     C   D  E  F  G
box1  0487  1   1  1  1  1
blue  0478  2   2  2  2  2
flat  8704  1   1  1     2
dark  8740  1   1  1  1  1
late  4087  1      1     1

Я рад услышать некоторые предложения.

1 Ответ

0 голосов
/ 05 ноября 2018

Создать словарь имен столбцов с агрегатными функциями и перейти к agg, также здесь необходимо от min_count=1 до sum для избежания 0 для суммы NaN s значений:

L = ['C','D','E','F','G']
d = {**dict.fromkeys(L, lambda x: x.sum(min_count=1)), **{'A':'first'}}
df = df.groupby('B', as_index=False, sort=False).agg(d).reindex(columns=df.columns)
print (df)
      A     B    C    D    E    F    G
0  box1  0487  1.0  1.0  1.0  1.0  1.0
1  blue  0478  2.0  2.0  2.0  2.0  2.0
2  flat  8704  1.0  1.0  1.0  NaN  2.0
3  dark  8740  1.0  1.0  1.0  1.0  1.0
4  late  4087  1.0  NaN  1.0  NaN  1.0

d = {**dict.fromkeys(L, 'sum'), **{'A':'first'}}
df = df.groupby('B', as_index=False, sort=False).agg(d).reindex(columns=df.columns)
print (df)
      A     B    C    D    E    F    G
0  box1  0487  1.0  1.0  1.0  1.0  1.0
1  blue  0478  2.0  2.0  2.0  2.0  2.0
2  flat  8704  1.0  1.0  1.0  0.0  2.0
3  dark  8740  1.0  1.0  1.0  1.0  1.0
4  late  4087  1.0  0.0  1.0  0.0  1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...