объединение фреймов данных и добавление значений общих элементов - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть несколько наборов данных, как это набор данных 1

Индекс | имя | val |

1 |  a   | 1  | 
2 |  b   | 0  |
3 |  c   | 3  |

набор данных 2

Индекс | имя | Вал |

1 |  g   | 4  | 
2 |  a   | 2  |
3 |  k   | 3  |
4 |  l   | 2  |

Я хочу объединить эти наборы данных таким образом, чтобы, если оба набора данных имели строку с общим именем элемента, в этом примере «a», я хочу, чтобы для объединенного набора данных была только одна строка где значение является суммой этого a и этого a, в этом случае объединенная строка a будет иметь значение 3 (2 + 1). номер индекса для элементов не имеет значения. Есть ли эффективный способ сделать это в самом Excel? Я новичок в запросе данных, но я пытаюсь учиться. Если я могу сделать это в пандах (я пытаюсь освоиться на этом языке) или в sql, я сделаю это. Мои наборы данных имеют разные размеры

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

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

df3 = df1.groupby('name').sum().add(df2.groupby('name').sum(), fill_value=0).reset_index()
df3['val'] = df3.fillna(0)[' val']+df3.fillna(0)['val']
df3 = df3.drop([' val'], axis=1)
print(df3)

Выход:

    name   index   val
0    a     3.0     3.0 
1    b     2.0     0.0 
2    c     3.0     3.0 
3    g     1.0     4.0 
4    k     3.0     3.0 
5    l     4.0     2.0 
0 голосов
/ 10 сентября 2018

IN Sql вы можете попробовать по следующему запросу:

select name,sum(val)
from
(select index,name,val from dataset1
union all
select index,name,val from dataset2) tmp
group by name

В Pandas:

df3=pd.concat([df1,df2],ignore_index=True)
df3.groupby(['name']).sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...