Как объединить две строки с одинаковым значением в данном столбце

#python #python-3.x #pandas #dataframe

#питон #python-3.x #панды #фрейм данных

Вопрос:

Эй, у меня есть такой фрейм данных, как этот:

 d = {"KEY": ["KEY2", "KEY2"], "String value": ["value 1", "value 2"], "list value": [["val1"], ["val2"]]} df = pd.DataFrame(d) df  

В KEY столбце есть одно и то же значение в обеих строках. Что я хочу сделать, так это создать одну строку из этих двух строк (или более в моем фрейме данных) таким образом, чтобы добавлялись значения из заданных столбцов (кроме KEY и, возможно, еще одного столбца). Итак, наконец-то я хочу вот так:

 d2 = {"KEY": ["KEY2"], "String value": ["value 1"   "value 2"], "list value": [["val1"]   ["val2"]]} res = pd.DataFrame(d2) res  

Как я могу это сделать?

Ответ №1:

groupby и sum

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

 d = {"KEY": ["KEY2", "KEY2"], "String value": ["value 1", "value 2"], "list value": [["val1"], ["val2"]],  "other value": [1, 1]} df = pd.DataFrame(d)   df2 = pd.DataFrame(df.groupby('KEY')['String value'].apply(lambda x:'n'.join(x))) df2['list value'] = df.groupby('KEY')['list value'].sum() df2['other value'] = df.groupby('KEY')['other value'].first() df2  
 KEY String value list value 0 KEY2 value 1value 2 [val1, val2]  

Комментарии:

1. спасибо 🙂 Как я могу добавить новую строку n между добавленными String value ? Возможно ли это? Более того, что, если у меня есть еще один столбец, скажем Type , для которого я не хочу выполнять суммирование?

2. @Mr. Хедж вы не можете оставить один столбец без изменений, потому что новый фрейм данных будет иметь другую форму по сравнению со старым

3. @Mr. Хедж см. обновленный ответ, предполагая, что вы имеете в виду неизменность, поскольку все они имеют одинаковое значение

4. Большое спасибо!